Modifikationsaktionen an Bedingungen knüpfen 
Sie können HTTP-Request Modifikationen durch die Verwendung von Bedingungen spezifizieren. In Releases vor 7.40 hatten Bedingungen die einfache Form. Mit der einfachen Form ist es möglich eine Bedingung mit einer einzelnen Modifikationsaktion zu verknüpfen.
Verwenden Sie die folgende Syntax in der Aktionsdatei um genau eine Modifikationsaktion an eine Bedingung zu knüpfen:
Syntax
if <string> <compop> <pattern> [op]
<rule>Ab Release 7.40 stehen zwei weitere Optionen zur Verfügung. Bedingungen können an einen Verarbeitungsblock geknüpft werden und sie können Verzweigungen enthalten.
In einem Verarbeitungsblock können mehrere Modifikationsaktionen angegeben werden. Sollte die Bedingung wahr sein, werden alle dort definierten Modifikationsaktionen beim Lesen der Aktionsdatei ausgeführt. Wenn die Bedingung nicht zutrifft, wird der komplette Verarbeitungsblock übersprungen. Verwenden Sie die folgende Syntax in der Aktionsdatei, um einen Verarbeitungsblock zu definieren:
Syntax
if <string> <compop> <pattern> [op]
begin
<rules>
endIn einer Verzweigung werden zwei Modifikationsaktionen miteinander kombiniert. Trifft die Bedingung zu, werden die vor dem else definierten Modifikationsaktionen ausgeführt. Wenn die Bedingung nicht zutrifft, werden alle nach dem else definierten Modifikationsaktionen ausgeführt. Sie haben weiterhin die Möglichkeit, keine Einträge bei <rule/rules> zu definieren bzw. durch ein vorangestelltes „#“ Zeichen Modifikationsaktionen auszukommentieren.
Um genau zwei Modifikationsaktionen zu verzweigen, können Sie folgende Syntax in der Aktionsdatei verwenden:
Syntax
if <string> <compop> <pattern> [op]
<rule>
else
<rule>Wenn Sie mehr als zwei Modifikationsaktionen angeben möchten, verwenden Sie folgende Syntax in der Aktionsdatei:
Syntax
if <string> <compop> <pattern> [op]
begin
<rules>
else
<rules>
end<string> |
Entweder feste Zeichenkette oder Element des HTTP-Requests (Headerfeld, Formfeld, systemdefinierte Werte). Der Zugriff erfolgt über Variablen. |
<compop> |
Vergleichsoperation; folgende Vergleichsoperationen sind zulässig:
Alle Vergleichsoperationen können durch ein vorangestelltes „!“ negiert werden. Die Groß- bzw. Kleinschreibung der Vergleichsoperationen spielt keine Rolle. Alle Namen der Vergleichsoperationen sind case insensitve. |
<pattern> |
Vergleichswert, mit dem verglichen werden soll. Ein Vergleichswert kann zum Beispiel ein regulärer Ausdruck bzw. eine IP-Adresse sein. |
[op] |
Sie können Bedingungen durch Operatoren miteinander verketten. Mögliche Operatoren sind and und or. Die Groß- bzw. Kleinschreibung der Operatoren spielt keine Rolle (z.B. OR = Or = or = oR). Anders als bei Programmiersprachen haben die hier verwendeten Operatoren keine Rangfolge. Die Operatoren werden von links nach rechts abgearbeitet. Die Verwendung von Operatoren ist optional. |
Beispiele für die Verwendung von Bedingungen:
Beispiel A:
Syntax
if %{HTTP_HOST} regimatch *.wdf.sap.com [and]
if %{SERVER_PORT} = 80
SetHeader clientProtocol http
Wenn der Rechnername (Wert des HTTP-Host-Headers HTTP_HOST) im HTTP-Request mit .wdf.sap.com endet und der HTTP-Port der Port 80 ist (http://xxx.wdf.sap.com:80/...), so wird das Headerfeld clientProtocol auf den Wert http gesetzt.
Beispiel B:
Syntax
If %{REQUEST_METHOD} !stricmp "GET" [and]
If %{REQUEST_METHOD} !stricmp "POST"
RegForbiddenUrl ^/(.*) –
Nur Requests mit GET und POST als Methode werden zugelassen. Alle anderen Requests werden abgewiesen.
Beispiel C:
Syntax
# Rewrite Rules for ICM
If %{REQUEST_METHOD} stricmp "TRACE"
RegForbiddenUrl ^/(.*) -
HTTP-Requests mit der TRACE Methode werden abgewiesen.
Beispiel D:
Syntax
if %{HEADER:USER-AGENT} !regimatch Mozilla/4.0*
RegForbiddenUrl (.*) -
Nur Requests, die die Zeichenkette Mozilla/4.0 (Groß- und Kleinschreibung wird nicht berücksichtigt) enthalten, sind erlaubt.
Beispiel E:
Syntax
If %{SERVER_PROTOCOL} !stricmp "https"
RegIRedirectUrl /sap/ (.*) https://%{HTTP_HOST}/sap/ $1 [code=permanent]
Wenn das verwendete Protokoll nicht HTTPS ist, wird der Request für HTTPS umgeschrieben.
Beispiel F:
Syntax
If %{REMOTE_ADDR} ipmatch 10.18.0.0/16
SetHeader test matched
Vergleich der entfernten IP Adresse mit der Ipv4 Maske „10.18.0.0/16“ (die ersten 16 bits sind relevant)
Beispiel G:
Syntax
If %{REMOTE_ADDR} !ipmatch 2001:db8::1428:57ab/32
Set Header “test matched”
Vergleich der entfernten IP Adresse mit der Ipv6 Maske „2001:db8::1428:57ab/32“ (die ersten 32 bits sind relevant)