Tutorial-Beispiele für erweiterte Rewriterichtlinien
Mit dem Rewrite können Sie einen beliebigen Teil eines HTTP-Headers ändern, und für Antworten können Sie den HTTP-Hauptteil ändern. Sie können diese Funktion verwenden, um mehrere nützliche Aufgaben auszuführen, z. B. das Entfernen unnötiger HTTP-Header, das Maskieren interner URLs, das Umleiten von Webseiten und das Umleiten von Abfragen oder Schlüsselwörtern.
In den folgenden Beispielen erstellen Sie zunächst eine Rewrite-Aktion und eine Rewriterichtlinie. Dann binden Sie die Richtlinie global.
Dieses Dokument enthält die folgenden Details:
- Umleiten einer externen URL auf eine interne URL
- Umleiten einer Abfrage
- Umschreiben von HTTP in HTTPS
- Entfernen unerwünschter Kopfzeilen
- Reduzieren von Webserver-Umleitungen
- Maskieren des Server-Headers
- Konvertieren von Klartext in eine URL-codierte Zeichenfolge und auf entgegengesetzte Weise
Weitere Informationen zu den Befehlen und Syntaxbeschreibungen finden Sie auf der Seite Rewrite-Befehlsreferenz.
Umleiten einer externen URL zu einer internen URL
In diesem Beispiel wird beschrieben, wie eine Rewrite-Aktion erstellt und eine Richtlinie neu geschrieben wird, die eine externe URL an eine interne URL umleitet. Sie erstellen eine Aktion namens act_external_to_internal, die das Rewrite durchführt. Anschließend erstellen Sie eine Richtlinie namens pol_external_to_internal.
So leiten Sie eine externe URL über die Befehlszeilenschnittstelle an eine interne URL um
- Um die Rewriteaktion zu erstellen, geben Sie an der Eingabeaufforderung Folgendes ein:
add rewrite action act_external_to_internal REPLACE “http.req.hostname.server” “\”host_name_of_internal_Web_server\””
- Um die Rewriterichtlinie zu erstellen, geben Sie an der NetScaler-Eingabeaufforderung Folgendes ein:
add rewrite policy pol_external_to_internal "http.req.hostname.server.eq(\"host_name_of_external_Web_server\")" act_external_to_internal
- Binden Sie die Richtlinie global.
So leiten Sie eine externe URL mithilfe des Konfigurationsdienstprogramms an eine interne URL um
- Navigieren Sie zu AppExpert > Rewrite > Aktionen.
- Klicken Sie im Detailbereich auf Hinzufügen.
- Geben Sie im Dialogfeld “Rewrite-Aktion erstellen “ den Namen act_external_to_internal ein.
- Um den Hostnamen des HTTP-Servers durch den internen Servernamen zu ersetzen, wählen Sie Ersetzen aus dem Listenfeld Typ.
- Geben Sie im Feld Header-Name Hostein.
- Geben Sie im Zeichenfolgenausdruck für ein Ersetzungstextfeld den internen Hostnamen Ihres Webservers ein.
- Klicken Sie auf Create und dann auf Close.
- Klicken Sie im Navigationsbereich auf Richtlinien.
- Klicken Sie im Detailbereich auf Hinzufügen.
- Geben Sie im Feld Name pol_external_to_internal ein. Diese Richtlinie erkennt Verbindungen zum Webserver.
- Wählen Sie im Dropdownmenü Aktion die Aktion act_external_to_internal aus.
- Konstruieren Sie im Ausdruckseditor den folgenden Ausdruck:
HTTP.REQ.HOSTNAME.SERVER.EQ("www.example.com")
<!--NeedCopy-->
- Binden Sie Ihre neue Richtlinie global.
Umleiten einer Abfrage
In diesem Beispiel wird beschrieben, wie eine Rewrite-Aktion erstellt und eine Richtlinie neu geschrieben wird, die eine Abfrage an die richtige URL umleitet. Das Beispiel geht davon aus, dass die Anfrage einen Host-Header enthält, der auf **www.example.com**
gesetzt ist, und eine GET-Methode mit der Zeichenfolge /query.cgi? Server=5. Die Umleitung extrahiert den Domänennamen aus dem Host-Header und die Nummer aus der Abfragezeichenfolge und leitet die Abfrage des Benutzers an den Server Web5.example.comum, wo der Rest der Abfrage des Benutzers verarbeitet wird.
Hinweis:
Obwohl die folgenden Befehle in mehreren Zeilen angezeigt werden, müssen Sie sie in einer einzigen Zeile ohne Zeilenumbrüche eingeben.
So leiten Sie eine Abfrage mit der CLI an die entsprechende URL um
- Um eine Rewrite-Aktion namens act_redirect_query zu erstellen, die den Hostnamen des HTTP-Servers durch den internen Servernamen ersetzt, geben Sie Folgendes ein:
add rewrite action act_redirect_query REPLACE http.req.header("Host").before_str(".example.com") '"Web" + http.req.url.query.value("server")'
- Um eine Rewriterichtlinie mit dem Namen pol_redirect_query zu erstellen, geben Sie die folgenden Befehle an der NetScaler-Eingabeaufforderung ein. Diese Richtlinie erkennt Verbindungen zum Webserver, die eine Abfragezeichenfolge enthalten. Wenden Sie diese Richtlinie nicht auf Verbindungen an, die keine Abfragezeichenfolge enthalten:
add rewrite policy pol_redirect_query 'http.req.header("Host").eq(www.example.com) && http.req.url.contains("?")' act_redirect_query
- Binden Sie Ihre neue Richtlinie global.
Da diese Rewriterichtlinie sehr spezifisch ist und vor anderen Rewriterichtlinien ausgeführt werden muss, ist es ratsam, ihr eine hohe Priorität zuzuweisen. Wenn Sie ihm eine Priorität von 1 zuweisen, wird sie zuerst ausgewertet.
Umschreiben von HTTP in HTTPS
In diesem Beispiel wird beschrieben, wie Webserver-Antworten neu geschrieben werden, um alle URLs zu finden, die mit der Zeichenfolge “HTTP” beginnen, und diese Zeichenfolge durch “https” ersetzen. Sie können damit vermeiden, Webseiten aktualisieren zu müssen, nachdem Sie einen Server von HTTP auf HTTPS verschoben haben.
So leiten Sie HTTP-URLs mit der CLI an HTTPS um
- Um eine Rewrite-Aktion namens act_replace_http_with_https zu erstellen, die alle Instanzen der Zeichenfolge “HTTP” durch die Zeichenfolge “https” ersetzt, geben Sie den folgenden Befehl ein:
add rewrite action act_replace_http_with_https replace_all 'http.res.body(100)' '"https"' -search text("http")
- Um eine Rewriterichtlinie mit dem Namen pol_replace_http_with_https zu erstellen, die Verbindungen zum Webserver erkennt, geben Sie den folgenden Befehl ein:
add rewrite policy pol_replace_http_with_https TRUE act_replace_http_with_https NOREWRITE
- Binden Sie Ihre neue Richtlinie global.
Informationen zur Behebung dieses Rewritevorgangs finden Sie unter “Fallstudie: Rewriterichtlinie von HTTP-Links in HTTPS funktioniert nicht. “
Entfernen unerwünschter Kopfzeilen
In diesem Beispiel wird erläutert, wie eine Rewriterichtlinie verwendet wird, um unerwünschte Header zu entfernen. Konkret zeigt das Beispiel, wie die folgenden Header entfernt werden:
- Akzeptieren Sie den Kodierungskopf. Das Entfernen des Accept Encoding Headers aus HTTP-Antworten verhindert die Komprimierung der Antwort.
- Kopfzeile für Inhaltsstandort. Durch das Entfernen des Content Location-Headers aus HTTP-Antworten wird verhindert, dass Ihr Server einem Hacker Informationen zur Verfügung stellt, die eine Sicherheitsverletzung zulassen könnten.
Um Header aus HTTP-Antworten zu löschen, erstellen Sie eine Rewriteaktion und eine Rewriterichtlinie und binden die Richtlinie global.
So erstellen Sie die entsprechende Rewrite-Aktion mit der CLI
Geben Sie an der Eingabeaufforderung einen der folgenden Befehle ein, um entweder den Header Accept Encoding zu entfernen und die Antwortkomprimierung zu verhindern, oder den Inhaltsspeicher-Header zu entfernen:
add rewrite action "act_remove-ae" delete_http_header "Accept-Encoding"
add rewrite action "act_remove-cl" delete_http_header "Content-Location"
So erstellen Sie die entsprechende Rewriterichtlinie mit der CLI
Geben Sie an der Eingabeaufforderung einen der folgenden Befehle ein, um entweder den Header Encoding akzeptieren oder den Header Content Location zu entfernen:
add rewrite policy "pol_remove-ae" true "act_remove-ae"
add rewrite policy "pol_remove-cl" true "act_remove-cl"
So binden Sie die Richtlinie global mit der CLI
Geben Sie an der Eingabeaufforderung einen der folgenden Befehle ein, um die erstellte Richtlinie global zu binden:
bind rewrite global pol_remove_ae 100
bind rewrite global pol_remove_cl 200
Reduzieren von Webserver-Umleitungen
In diesem Beispiel wird erläutert, wie Sie eine Rewriterichtlinie verwenden, um Verbindungen zu Ihrer Homepage und anderen URLs zu ändern, die mit einem Schrägstrich (/) auf die Standardindexseite für den Server enden, wodurch Umleitungen vermieden und die Belastung des Servers verringert wird.
So ändern Sie HTTP-Anfragen auf Verzeichnisebene so, dass sie die Standard-Homepage mit der CLI einschließen
- Geben Sie Folgendes ein, um eine Rewrite-Aktion mit dem Namen action-default-homepage zu erstellen, die URLs, die mit einem Schrägstrich enden, so dass sie die Standardstartseite index.html enthält:
add rewrite action "action-default-homepage" replace http.req.url.path "\"/index.html\""
- Um eine Rewriterichtlinie mit dem Namen policy-default-homepage zu erstellen, die Verbindungen zu Ihrer Homepage erkennt und Ihre neue Aktion anwendet, geben Sie Folgendes ein:
add rewrite policy "policy-default-homepage" q\#http.req.url.path.EQ("/") "action-default-homepage"\#
- Binden Sie Ihre neue Richtlinie global, um sie in Kraft zu setzen.
Maskieren des Server-Headers
In diesem Beispiel wird erläutert, wie Sie eine Rewriterichtlinie verwenden, um die Informationen im Server-Header in HTTP-Antworten vom Webserver zu maskieren. Dieser Header enthält Informationen, mit denen Hacker Ihre Website gefährden können. Während das Maskieren des Headers einen erfahrenen Hacker nicht daran hindert, Informationen über Ihren Server zu finden, erschwert dies das Hacken Ihres Webservers und ermutigt Hacker, weniger gut geschützte Ziele auszuwählen.
So maskieren Sie den Server-Header in Antworten von der CLI
- Um eine Rewrite -Aktion namens act_mask-server zu erstellen, die den Inhalt des Server-Headers durch eine nicht informative Zeichenfolge ersetzt, geben Sie Folgendes ein:
add rewrite action "act_mask-server" replace "http.RES.HEADER(\"Server\")" "\"Web Server 1.0\""
- Um eine Rewriterichtlinie mit dem Namen pol_mask-server zu erstellen, die alle Verbindungen erkennt, geben Sie Folgendes ein:
add rewrite policy "pol_mask-server" true "act_mask-server"
- Binden Sie Ihre neue Richtlinie global, um sie in Kraft zu setzen.
Wie konvertiert man Nur-Text in eine URL-codierte Zeichenfolge und auf entgegengesetzte Weise
Die folgenden Ausdrücke wandeln Nur-Text in eine URL-codierte Zeichenfolge und umgekehrt um:
- URL_RESERVED_CHARS_SAFE (string to URL ENCODED).
Beispiel:
("abc def&123").URL_RESERVED_CHARS_SAFE
Output will be
“abc%20def%26123” which is url encoded.
<!--NeedCopy-->
- SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE. (URL ENCODED to string)
Beispiel:
("abc%20def%26123").SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE
Output will be
“abc def&123”
<!--NeedCopy-->