Detaillierte Erläuterung häufig verwendeter Nginx-Umschreibregeln

Detaillierte Erläuterung häufig verwendeter Nginx-Umschreibregeln

Dieser Artikel enthält einige häufig verwendete Umschreibregeln zum Verschönern von Webseiten-Links. Wenn Sie nicht wissen, woher die $1$2 in der Regel kommen, denken Sie einfach daran, dass das erste () $1 und das zweite () $2 ist.

Die angeforderte URL ist für Menschen sichtbar, und die umgeschriebene URL ist für Computer sichtbar.

Eine Suche durchführen

Der Zweck dieser Regel besteht darin, eine Suche nach in der URL enthaltenen Schlüsselwörtern durchzuführen.

Angeforderte URL: //hqidi.com/search/some-search-keywords
Umgeschriebene URL: //hqidi.com/search.php?p=some-search-keywords
Regel neu schreiben neu schreiben ^/search/(.*)$ /search.php?p=$1?;

Benutzerprofilseite

Die meisten dynamischen Websites, die Besucherregistrierungen durchführen, bieten eine Seite, auf der das Profil angezeigt werden kann. Die URL dieser Seite enthält die UID und den Benutzernamen des Benutzers.

Angeforderte URL: //hqidi.com/user/47/dige
Umgeschriebene URL //hqidi.com/user.php?id=47&name=dige
Regel neu schreiben neu schreiben ^/user/([0-9]+)/(.+)$ /user.php?id=$1&name=$2?;

Mehrere Parameter

Einige Sites verwenden eine andere Syntax für Zeichenfolgenparameter, beispielsweise die Verwendung von Schrägstrichen "/" zum Trennen nicht benannter Parameter.

Angeforderte URL: //hqidi.com/index.php/param1/param2/param3
Umgeschriebene URL //hqidi.com/index.php?p1=param1&p2=param2&p3=param3
Regel neu schreiben: neu schreiben ^/index.php/(.*)/(.*)/(.*)$ /index.php?p1=$1&p2=$2&p3=$3?;

Enzyklopädieähnliches Format

Dieses Format verfügt über ein Präfix „Verzeichnis“, gefolgt vom Artikelnamen

Angeforderte URL: //hqidi.com/wiki/some-keywords
Umgeschriebene URL //hqidi.com/wiki/index.php?title=some-keywords
Regel neu schreiben neu schreiben ^/wiki/(.*)$ /wiki/index.php?title=$1?;

Forum

Foren verwenden im Allgemeinen zwei Parameter, eine Themenkennung (Thema) und einen Startpunkt (Startbeitrag).

Angeforderte URL: //hqidi.com/topic-1234-50-some-keywords.html
Umgeschriebene URL //hqidi.com/viewtopic.php?topic=1234&start=50
Regel neu schreiben neu schreiben ^/topic-([0-9]+)-([0-9]+)-(.*)\.html$ viewtopic.php?topic=$1&start=$2?;

Neue Site-Artikel

Kennzeichnend für diese URL-Struktur ist eine Artikelkennung, gefolgt von einem Schrägstrich und einer Liste von Schlüsselwörtern.

Angeforderte URL: //hqidi.com/88/future
Umgeschriebene URL: //hqidi.com/atricle.php?id=88
Regel neu schreiben umschreiben ^/([0-9]+)/.*$ /aticle.php?id=$1?;

Das letzte Fragezeichen

Wenn die zu ersetzende URI Parameter enthält (z. B. /app/test.php?id=5), werden die Parameter standardmäßig automatisch an die Ersetzungszeichenfolge angehängt. Dieses Problem kann gelöst werden, indem am Ende der Ersetzungszeichenfolge ein ?-Zeichen hinzugefügt wird.

umschreiben ^/users/(.*)$ /show?user=$1? last;

One Plus vergleichen? Markiert oder nicht? Der Unterschied zwischen markierten URL-Sprüngen:

neu schreiben ^/test(.*)$ //hqidi.com/home premanent;

Besuchen Sie //hqidi.com/test?id=5 und nach der 301-Weiterleitung lautet die URL-Adresse //hqidi.com/home?id=5

neu schreiben ^/test(.*)$ //hqidi.com/home? dauerhaft;

Besuchen Sie //hqidi.com/test?id=5 und die URL nach der 301-Weiterleitung ist //hqidi.com/home

Die Umschreibfunktion von Nginx erfordert die Unterstützung der PCRE-Software, d. h. der Regelabgleich wird über Perl-kompatible reguläre Ausdrucksanweisungen durchgeführt. Das Kompilieren von nginx mit Standardparametern unterstützt das Rewrite-Modul, aber PCRE-Unterstützung ist ebenfalls erforderlich

„rewrite“ ist die Schlüsselanweisung zum Umschreiben von URLs. Sie leitet zum Ersetzen gemäß dem Regex-Teil (regulärer Ausdruck) weiter und endet mit einem Flag-Tag.

Reihenfolge der Ausführung von Nginx-Umschreibbefehlen

1. Führen Sie die Umschreibanweisung des Serverblocks aus (der Block bezieht sich hier auf den von {} umgebenen Bereich nach dem Serverschlüsselwort, und andere xx-Blöcke sind ähnlich).
2. Standortabgleich durchführen
3. Führen Sie den Umschreibbefehl am ausgewählten Speicherort aus

Wenn die URI in einem beliebigen Schritt neu geschrieben wird, werden die Schritte 1 bis 3 in einer Schleife erneut ausgeführt, bis eine echte Datei gefunden wird.

Wenn die Schleife mehr als 10 Mal wiederholt wird, wird ein 500 Internal Server Error zurückgegeben.

Flagge

Die Umschreibsyntax ist sehr einfach und lautet beispielsweise:

Regex-URL umschreiben [Flag];

„rewrite“ ist ein Schlüsselwort, „regex“ ist ein regulärer Ausdruck, „URL“ ist der zu ersetzende Inhalt und „[flag]“ bedeutet das Flag-Bit, das die folgenden Werte hat:

  • last: Entspricht dem Flag [L] in Apache und zeigt an, dass das Umschreiben abgeschlossen ist.
  • break: Stoppen Sie die Ausführung des nachfolgenden Umschreibbefehlssatzes des aktuellen virtuellen Hosts
  • Umleitung: Gibt eine temporäre 302-Umleitung zurück und in der Adressleiste wird die umgeleitete Adresse angezeigt
  • permanent: Gibt eine permanente 301-Umleitung zurück und in der Adressleiste wird die umgeleitete Adresse angezeigt

Da 301 und 302 nicht einfach nur den Statuscode zurückgeben können, muss auch eine Umleitungs-URL vorhanden sein. Aus diesem Grund kann die Rückgabeanweisung nicht 301,302 zurückgeben. Der Unterschied zwischen last und break ist hier etwas schwierig zu verstehen:

  • „Last“ wird normalerweise in „Server“ und „if“ geschrieben, während „Break“ normalerweise in „Location“ verwendet wird.
  • last beendet den neu geschriebenen URL-Abgleich nicht, d. h. die neue URL durchläuft den Abgleichprozess vom Server aus erneut, während break den neu geschriebenen Abgleich beendet.
  • Sowohl „Break“ als auch „Last“ können die Ausführung nachfolgender Umschreibanweisungen verhindern.

Schauen wir uns ein einfaches Beispiel an:

umschreiben ^/listings/(.*)$ /listing.html?listing=$1 last;
neu schreiben ^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? last;

In der ersten Umschreibregel können wir die benutzerfreundliche URL http://mysite.com/listings/123 anstelle von http://mysite.com/listing.html?listing=123 verwenden. Dies entspricht der Eingabe von http://mysite.com/listings/123 in die Adressleiste des Browsers. Die tatsächlich aufgerufene URL-Ressource ist dann http://mysite.com/listing.html?listing=123.

In der zweiten Regel wird die Dateianforderung der Form http://mysite.com/images/bla_500x400.jpg auf die Adresse http://mysite.com/resizer/bla.jpg?width=500&height=400 umgeschrieben und es wird weiterhin versucht, den Speicherort abzugleichen.

if-Anweisung und globale Variablen

Die Syntax der if-Anweisung lautet if(Bedingung){...}, wodurch die gegebene Bedingung beurteilt wird. Wenn wahr, werden die Umschreibeanweisungen innerhalb der geschweiften Klammern ausgeführt.

Schauen wir uns die Coderegeln an:

wenn ($http_user_agent ~ MSIE) {
  umschreiben ^(.*)$ /msie/$1 break;
} //Wenn UA „MSIE“ enthält, schreiben Sie die Anfrage in das Verzeichnis /msid/ um, if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
  setze $id $1;
 } //Wenn das Cookie mit dem regulären Ausdruck übereinstimmt, setzen Sie die Variable $id so, dass sie dem Referenzteil des regulären Ausdrucks entspricht, if ($request_method = POST) {
  Rückgabe 405;
} //Wenn die Übermittlungsmethode POST ist, ist der Rückgabestatus 405 (Methode nicht zulässig). Rückkehr kann nicht zurückkehren 301,302
 
wenn ($langsam) {
  Grenzrate 10k;
} // Geschwindigkeitsbegrenzung, $slow kann mit dem Befehl set festgelegt werden if (!-f $request_filename){
  brechen;
  Proxy-Passwort http://127.0.0.1; 
} //Wenn der angeforderte Dateiname nicht existiert, Reverse-Proxy zum lokalen Host. Der Break hier stoppt auch die Umschreibprüfung, wenn ($args ~ post=140){
  neu schreiben ^ http://mysite.com/ permanent;
} //Wenn die Abfragezeichenfolge „post=140“ enthält, permanente Weiterleitung zu mysite.com

In der if-Anweisung können globale Variablen verwendet werden. Diese Variablen sind:

  • $args: #Diese Variable entspricht den Parametern in der Anforderungszeile, dasselbe wie $query_string
  • $content_length: Das Inhaltslängenfeld im Anforderungsheader.
  • $content_type: Das Content-Type-Feld im Anforderungsheader.
  • $document_root: Der in der Root-Direktive der aktuellen Anfrage angegebene Wert.
  • $host: Das Host-Headerfeld der Anforderung, andernfalls der Servername.
  • $http_user_agent: Client-Agent-Informationen
  • $http_cookie: Client-Cookie-Informationen
  • $limit_rate: Diese Variable kann die Verbindungsrate begrenzen.
  • $request_method: Die vom Client angeforderte Aktion, normalerweise GET oder POST.
  • $remote_addr: Die IP-Adresse des Clients.
  • $remote_port: Der Port des Clients.
  • $remote_user: Der Benutzername, der vom Auth Basic-Modul authentifiziert wurde.
  • $request_filename: Der Dateipfad der aktuellen Anfrage, generiert durch die Root- oder Alias-Direktive und die URI-Anfrage.
  • $scheme: HTTP-Protokoll (wie http, https).
  • $server_protocol: Das in der Anfrage verwendete Protokoll, normalerweise HTTP/1.0 oder HTTP/1.1.
  • $server_addr: Serveradresse. Dieser Wert kann nach Abschluss eines Systemaufrufs ermittelt werden.
  • $server_name: Servername.
  • $server_port: Die Portnummer, unter der die Anfrage beim Server eingeht.
  • $request_uri: Die ursprüngliche URI einschließlich der Anforderungsparameter, ohne den Hostnamen, beispielsweise: „/foo/bar.php?arg=baz“.
  • $uri: Die aktuelle URI ohne Anforderungsparameter. $uri enthält nicht den Hostnamen, z. B. „/foo/bar.html“.
  • $document_uri: Dasselbe wie $uri.

Mit Return springen

Manchmal müssen wir Nginx neu schreiben, um einen 301-Adresssprung durchzuführen, beispielsweise nach den folgenden Regeln:

neu schreiben ^ $scheme://www.mysite.com$request_uri permanent;

Wenn Sie eine beliebige URL besuchen, wird sie permanent mit 301 auf die URL www.mysite.com umgeleitet. Diese Schreibweise ist korrekt, aber durch die Verwendung der regelmäßigen Umschreibeübereinstimmung werden einige Ressourcen verbraucht und die offizielle Nginx-Website empfiehlt diese Schreibweise nicht. Wir können auch return verwenden, um eine 301-Umleitung zu erreichen, was einfach und praktisch ist. Siehe das Beispiel:

301 Permanente Weiterleitung zum neuen Domänennamen

Server {
  hören Sie 80;
  hören Sie 443 SSL;
  Servername www.alter-Name.com alter-Name.com;
  Rückgabe 301 $scheme://www.neuer-name.com;
}

Der obige Code implementiert eine 301-Umleitung vom alten Domänennamen zum neuen Domänennamen. Wenn die Website zu einem neuen Domänennamen wechseln muss, verwenden Sie diese Methode, um eine 301-Umleitung durchzuführen.

301-Umleitung von einer Domäne ohne www zu einer Domäne mit www

Server {
  hören Sie 80;
  hören Sie 443 SSL;
  Servername mysite.com;
  gibt 301 $scheme://www.mysite.com$request_uri zurück;
}

301-Weiterleitung von der http-Site zur https-Site

Server {
  hören Sie 80;
  Servername www.mysite.com;
  gibt 301 https://www.mysite.com$request_uri zurück;
}

Das Obige ist eine Einführung in das Umschreiben und Umleiten von Nginx. Wenn Sie es nützlich finden, üben Sie es bitte oft und speichern Sie diesen Artikel, damit Sie nicht verloren gehen. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützt.

Das könnte Sie auch interessieren:
  • Beispiel für die reguläre Umschreibmethode für Nginx Rewrite (Matching)
  • So leiten Sie eine URL mit Nginx Rewrite um
  • nginx Konfigurationsort Zusammenfassungsort Regelmäßiges Schreiben und Umschreiben von Regeln
  • Detaillierte Erläuterung der Zusammenfassung des Nginx-Konfigurationsorts und des Schreibens von Umschreibregeln
  • Detaillierte Erläuterung des Nginx-Umschreibens und der Lokalisierung gemäß URL-Parametern
  • Detaillierte Erklärung des Rewrite-Moduls von Nginx

<<:  So verwenden Sie Lazy Loading in React, um die Ladezeit des ersten Bildschirms zu verkürzen

>>:  Anweisungen zur Verwendung des Datenbankverbindungspools Druid

Artikel empfehlen

MP3- oder Flashplayer-Code auf der Webseite abspielen

Code kopieren Der Code lautet wie folgt: <Obje...

Tutorial zur Verarbeitung statischer Ressourcen in Tomcat

Vorwort Alle Anfragen in Tomcat werden von Servle...

30 Minuten, um Ihnen ein umfassendes Verständnis von React Hooks zu vermitteln

Inhaltsverzeichnis Überblick 1. useState 1.1 Drei...

Eine andere Art von „Abbrechen“-Button

Der „Abbrechen“-Button ist nicht Teil des notwend...

So entwickeln Sie Uniapp mit vscode

Da ich immer vscode zur Entwicklung von Front-End...

js implementiert das klassische Minesweeper-Spiel

In diesem Artikelbeispiel wird der spezifische Co...

Implementierung der durch Kommas getrennten MySQL-Split-Funktion

1: Definieren Sie eine gespeicherte Prozedur zum ...

Detaillierte Erklärung der MySQL-Partitionstabelle

Vorwort: Partitionierung ist ein Tabellenentwurfs...

Erstellen Sie ein Docker-Image mit Dockerfile

Inhaltsverzeichnis Erstellen Sie ein Docker-Image...

Detaillierte Erklärung der Docker Compose-Verwendung

Inhaltsverzeichnis Docker Compose-Nutzungsszenari...

Implementierung des Docker-CPU-Limits

1. --cpu=<Wert> 1) Geben Sie an, wie viele ...

Grafisches Tutorial zur Installation von MySQL 8.0.15 und Datenbankgrundlagen

Die Installation der MySQL-Software und die Daten...

Beispiel für die Anpassung des Stils des Auswahlfelds für Formulardateien

Code kopieren Der Code lautet wie folgt: <!DOC...