Show TOC

HintergrundModifikationsaktionen an Bedingungen knüpfen Dieses Dokument in der Navigationsstruktur finden

 

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.

Struktur

Verwenden Sie die folgende Syntax in der Aktionsdatei um genau eine Modifikationsaktion an eine Bedingung zu knüpfen:

Syntax einer einzelnen Request Modifikation

Syntax Syntax

  1. if <string> <compop> <pattern> [op]
          <rule>
Ende des Codes

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.

Syntax Verarbeitungsblock

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 Syntax

  1. if <string> <compop> <pattern> [op]
    begin
        <rules>
    end
Ende des Codes
Syntax Verzweigung

In 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 Syntax

  1. if <string> <compop> <pattern> [op]
        <rule>
    else
        <rule>
Ende des Codes

Wenn Sie mehr als zwei Modifikationsaktionen angeben möchten, verwenden Sie folgende Syntax in der Aktionsdatei:

Syntax Syntax

  1. if <string> <compop> <pattern> [op]
    begin
        <rules>
    else
        <rules>
    end
Ende des Codes
Bedeutung der Syntax:

<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:

  • regmatch: pattern match case sensitive

  • regimatch: pattern match case insensitiv

  • strcmp: Zeichenkettenvergleich case sensitiver

  • stricmp: Zeichenkettenvergleich case insensitiv

  • ipmatch: match von IP Adresse gegen eine andere IP Adresse oder eine Adressmaske.

    Verwenden Sie folgende Syntax, um eine IP Adresse bzw. eine Adressmaske zu definieren

    ipmatch <addr> <mask>

    Die IP Adresse muss eine IPv4- oder IPv6-Adresse der folgenden Form sein:

    IPv4: 4 byte dezimal, ein . (Punkt) separiert z.B. 10.11.12.13

    IPv6: 6 byte hexadezimal. : steht für „separiert“ :: steht für „wird unterstützt“

    Wenn eine Maske angegeben wird, dann muss es eine Subnetz-Präfixmaske sein: IPv4: 0-32 IPv6: 0-128

  • Lexikalische Vergleichsoperationen:

    =, <, >, <=, >=,

    Bedeutung von links nach rechts:

    lexikalisch gleich, lexikalisch kleiner, lexikalisch größer, lexikalisch kleiner oder gleich, lexikalisch größer oder gleich.

    Die Operanden werden lexikalisch miteinander verglichen, z.B. 123 < 4 ergibt TRUE, da nur die ersten Ziffern miteinander verglichen werden.

  • Zahlenvergleichsoperationen:

    int=, int!=, int<, int<=, int>, int>=,

    Bedeutung von links nach rechts:

    integer gleich, integer ungleich, integer kleiner, integer kleiner oder gleich, integer größer, integer größer oder gleich.

    Wenn Sie Zahlen miteinander vergleichen wollen, verwenden Sie die Zahlenvergleichsoperationen.

    Alle Zeichen werden bei der Zahlenvergleichsoperation als gesamte Zahl miteinander verglichen, z.B. 123 < 4 ergibt FALSE, da anders als beim lexikalischen Vergleich 123 als gesamte Zahl interpretiert wird.

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.

Beispiel

Beispiele für die Verwendung von Bedingungen:

Beispiel A:

Syntax Syntax

  1. if %{HTTP_HOST} regimatch *.wdf.sap.com [and]
    if %{SERVER_PORT} = 80
    SetHeader clientProtocol http
    
Ende des Codes

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 Syntax

  1. If %{REQUEST_METHOD} !stricmp "GET" [and]
    If %{REQUEST_METHOD} !stricmp "POST"
    RegForbiddenUrl ^/(.*) –
    
Ende des Codes

Nur Requests mit GET und POST als Methode werden zugelassen. Alle anderen Requests werden abgewiesen.

Beispiel C:

Syntax Syntax

  1. # Rewrite Rules for ICM
    If %{REQUEST_METHOD} stricmp "TRACE"
    RegForbiddenUrl ^/(.*) -
    
Ende des Codes

HTTP-Requests mit der TRACE Methode werden abgewiesen.

Beispiel D:

Syntax Syntax

  1. if %{HEADER:USER-AGENT} !regimatch Mozilla/4.0*
    RegForbiddenUrl (.*) -
    
Ende des Codes

Nur Requests, die die Zeichenkette Mozilla/4.0 (Groß- und Kleinschreibung wird nicht berücksichtigt) enthalten, sind erlaubt.

Beispiel E:

Syntax Syntax

  1. If %{SERVER_PROTOCOL} !stricmp "https"
    RegIRedirectUrl /sap/ (.*) https://%{HTTP_HOST}/sap/ $1 [code=permanent]
    
Ende des Codes

Wenn das verwendete Protokoll nicht HTTPS ist, wird der Request für HTTPS umgeschrieben.

Beispiel F:

Syntax Syntax

  1. If %{REMOTE_ADDR} ipmatch 10.18.0.0/16
    SetHeader test matched
    
Ende des Codes

Vergleich der entfernten IP Adresse mit der Ipv4 Maske „10.18.0.0/16“ (die ersten 16 bits sind relevant)

Beispiel G:

Syntax Syntax

  1. If %{REMOTE_ADDR} !ipmatch 2001:db8::1428:57ab/32
    Set Header “test matched”
    
Ende des Codes

Vergleich der entfernten IP Adresse mit der Ipv6 Maske „2001:db8::1428:57ab/32“ (die ersten 32 bits sind relevant)