Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 11719|Antwort: 1

[Web] Ein Beispiel veranschaulicht die Umschreibregel in Nginx

[Link kopieren]
Veröffentlicht am 05.12.2014 22:45:25 | | |
Eins. Reguläre Ausdrucksübereinstimmung, wobei:
* ~ ist kleinschreibungsabhängiges Matching
* ~* ist eine kleinschreibungslose Übereinstimmung
* !~ und !~* sind klein- und kleinschreibungssensitive Fehlanpassungen
Zwei. Datei- und Verzeichnis übereinstimmen, wobei:
* -f und !-f werden verwendet, um zu bestimmen, ob eine Datei existiert
* -d und !-d werden verwendet, um zu bestimmen, ob ein Verzeichnis existiert
* -e und !-e werden verwendet, um festzustellen, ob eine Datei oder ein Verzeichnis existiert
* -x und !-x werden verwendet, um zu bestimmen, ob eine Datei ausführbar ist oder nicht
3. Der letzte Parameter der Umschreibanweisung ist die Flaggenmarkierung, die mit folgendem markiert ist:
1.last entspricht dem [L]-Zeichen in Apache, was Rewrite bedeutet.
2. Pause Nachdem das Matching dieser Regel abgeschlossen ist, wird das Matching beendet und die nachfolgenden Regeln werden nicht mehr gematcht.
3.Redirect liefert 302 temporäre Redirect, und die Browseradresse zeigt die URL-Adresse nach dem Sprung an.
4.Permanent return 301 Permanent Redirect, die Browseradresse zeigt die URL-Adresse nach dem Sprung an.


Verwenden Sie Last und Break, um URI-Umschreibungen zu implementieren, und die Adressleiste des Browsers bleibt unverändert. Und es gibt einen kleinen Unterschied zwischen den beiden: Die Verwendung des Alias-Befehls muss mit Last markiert werden; Wenn du proxy_pass Direktiven verwendest, musst du das Break-Tag verwenden. Nachdem das letzte Tag in dieser Rewrite-Regel ausgeführt wurde, befindet es sich auf dem Server{......} Tag startet die Anfrage erneut, während das Break-Tag das Match nach Abschluss des Regelmatches beendet.
Zum Beispiel: Wenn wir eine URL wie /photo/123456 auf /path/to/photo/12/1234/123456.png umleiten
"/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png umschreiben ;


Vier. NginxRewrite-Regel


1. Befehl brechen
Nutzungsumgebung: Server, Standort, ob;
Die Direktive vervollständigt das aktuelle Regelwerk und verarbeitet die Umschreibanweisung nicht mehr.


2. Wenn direktiv,
Nutzungsumgebung: Server, Standort
Diese Instruktion wird verwendet, um zu prüfen, ob eine Bedingung erfüllt ist, und falls ja, um die Anweisung innerhalb der geschwungenen Klammern auszuführen. Der Befehl If unterstützt kein Verschachteln und unterstützt keine mehreren Bedingungen && sowie || Behandlung.


3. Rückgabekommando
Syntax: Returncode ;
Nutzungsumgebung: Server, Standort, ob;
Diese Anweisung wird verwendet, um die Ausführung der Regel zu beenden und einen Statuscode an den Client zurückzugeben.
Beispiel: Wenn die besuchte URL auf ".sh" oder ".bash" endet, wird ein 403-Statuscode zurückgegeben
Ort ~ .*\. (sh|bash)?$
{
Rückfahrt 403;
}


4. Befehl umschreiben
Syntax: Rewriteregex Ersatz-Flag
Nutzungsumgebung: Server, Standort, falls
Diese Direktive leitet die URI basierend auf dem Ausdruck um oder modifiziert die Zeichenkette. Die Anweisungen werden in der Reihenfolge der Konfigurationsdatei ausgeführt. Beachten Sie, dass das Umschreiben von Ausdrücken nur für relative Pfade gültig ist. Wenn Sie Hostnamen koppeln möchten, sollten Sie if-Anweisungen verwenden, zum Beispiel unten:
wenn( $host ~* www\.(. *) )
{
setze $host_without_www $1;
umschreiben ^(.*)$ http://$host_without_www$1permanent;
}


5. Befehl setzen
Syntax: Setvariable-Wert; Standard: keine; Nutzungsumgebung: Server, Standort, ob;
Diese Direktive wird verwendet, um eine Variable zu definieren und ihr einen Wert zuzuweisen. Der Wert einer Variablen kann Text, Variable oder Vereinigung von Textvariablen sein.
Beispiel: set$varname "hello world";


6.Uninitialized_variable_warn Anweisungen
Syntax: uninitialized_variable_warnon|off
Nutzungsumgebung: http, Server, Standort, falls
Dieser Befehl wird verwendet, um die Warnmeldung für nicht initialisierte Variablen ein- und auszuschalten, und der Standardwert ist Ein.




Fünf. Beispiel zum Schreiben von Nginx-Regeln
1. Wenn die abgerufene Datei und das Verzeichnis nicht existieren, leiten Sie auf eine bestimmte php-Datei um.
if( !-e $request_Dateiname )
{
^/(.*)$ index.php Last umschreiben;
}


2. Verzeichnistausch /123456/xxxx ====> /xxxx?id=123456
umschreiben ^/(\d+)/(.+)/ /$2?id=$1 letzt;


3. Wenn der Client den IE-Browser verwendet, leitet er auf das /ie-Verzeichnis um
if( $http_user_agent ~ MSIE)
{
Umschreiben ^(.*)$ /ie/$1 Pause;
}


4. Den Zugriff auf mehrere Verzeichnisse deaktivieren
Standort ~ ^/(cron|Vorlagen)/
{
alles leugnen;
Unterbrechung;
}


5. Den Zugriff auf Dateien, die mit /data beginnen, deaktivieren
Standort ~ ^/Data
{
alles leugnen;
}


6. Den Zugriff auf Dateien mit Dateiendungen .sh, .flv .mp3 verbieten
Ort ~ .*\. (sh|flv|mp3)$
{
Rückfahrt 403;
}


7. Setzen Sie die Browser-Cache-Zeit für bestimmte Dateitypen ein
Ort ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
läuft 30 Pence ab;
}
Ort ~ .*\. (js|css)$
{
läuft 1 Stunde ab;
}


8. Setzen Sie Ablaufzeiten für favicon.ico und robots.txt;
Hier beträgt die favicon.ico 99 Tage, die robots.txt 7 Tage, und das 404-Fehlerprotokoll wird nicht protokolliert
Ort ~(favicon.ico) {
log_not_found ab;
läuft ab 99D;
Unterbrechung;
}
Ort ~(robots.txt) {
log_not_found ab;
läuft 7d ab;
Unterbrechung;
}


9. Legen Sie die Verfallszeit eines bestimmten Dokuments fest; Das sind 600 Sekunden, und Zugriffsprotokolle werden nicht erfasst
Ort ^~ /html/scripts/loadhead_1.js {
access_log ab;
root /opt/lampp/htdocs/web;
läuft ab 600;
Unterbrechung;
}


10. Anti-Hotlink-Dateien und feste Ablaufzeiten
Return412 hier ist ein benutzerdefinierter HTTP-Statuscode, der standardmäßig auf 403 eingestellt ist, was praktisch ist, um die richtige Hotlink-Anfrage zu finden
"Umschreiben ^/; "Zeigt ein Bild eines Anti-Hotlinks
"access_log weg;" Es werden keine Zugriffsprotokolle erfasst, was den Stress reduziert
"Läuft 3D ab" 3 Tage Browser-Cache für alle Dateien


Standort ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers keine blockierte *.xx.com*.xx.net localhost 208.97.167.194;
if ($invalid_referer) {
Umschreiben ^/;
Rückfahrt 412;
Unterbrechung;
}
access_log ab;
root /opt/lampp/htdocs/web;
verliert 3D;
Unterbrechung;
}


11. Nur mit Passwort einen festen IP-Zugriff auf die Website erlauben


root /opt/htdocs/www;
erlaubt 208.97.167.194;
allow 222.33.1.2;
erlaubt 231.152.49.4;
alles leugnen;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Konvertiere Dateien in mehrstufigen Verzeichnissen in eine Datei, um SEO-Effekte zu verbessern
/job-123-456-789.html 指向/job/123/456/789.html


umschreiben^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html letzt;


13. Weiterleiten, wenn Dateien und Verzeichnisse nicht existieren:


if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}


14. Einen Ordner im Root-Verzeichnis auf das Level-2-Verzeichnis verweisen
Zum Beispiel zeigt /shanghaijob/ auf /area/shanghai/
Wenn du die letzte auf permanent änderst, lautet die Adressleiste des Browsers /standort/shanghai/
umschreiben ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;
Das Problem mit dem obigen Beispiel ist, dass es beim Zugriff auf /shanghai nicht übereinstimmt
umschreiben ^/([0-9A-Z]+)job$ /area/$1/ letzt;
umschreiben ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;
Dieser Weg/Shanghai ist ebenfalls zugänglich, aber die zugehörigen Links auf der Seite sind nicht verfügbar,
Wenn ./list_1.html echte Adresse /area/shanghia/list_1.html ist, wird sie zu /list_1.html, wodurch sie unzugänglich wird.
Dann kann ich kein automatisches Springen hinzufügen
(-d $request_filename) hat die Bedingung, dass es sich um ein echtes Verzeichnis handeln muss, und mein Rewrite ist es nicht, sodass es keine Wirkung hat
if (-d $request_filename){
umschreiben ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
Es ist einfach, wenn man den Grund kennt, lass mich manuell springen.
umschreiben ^/([0-9a-z]+)job$ /$1job/permanent;
umschreiben ^/([0-9A-Z]+)job/(.*)$ /area/$1/$2last;


15. Domainnamen-Sprung
Server
{
hören 80;
server_name jump.linuxidc.com;
Index index.html index.htm index.php;
root /opt/lampp/htdocs/www;
umschreiben ^/ http://www.xx.com/;
access_log ab;
}


16. Multi-Domain-Drehen
server_name www.xx.comwww.xx.com;
Index index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ "linuxidc\.net") {
umschreiben ^(.*) http://www.xx.com$1permanent;
}


6. nginx globale Variablen
arg_PARAMETER #这个变量包含GET请求中, wenn es eine Variable PARAMETER gibt.
args #这个变量等于请求行中 (GET-Anfrage) Parameter, z. B. foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Diese Daten sind auch dann korrekt, wenn die Verbindung unterbrochen wird.
content_length #请求头中的Content Länge Feld.
content_type #请求头中的Content-Typ Feld.
cookie_COOKIE #cookie den Wert der COOKIE-Variablen
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
Host #请求主机头字段, ansonsten der Servername.
Hostname #Set zum Hostname von TheMachine, wie er von gethostname zurückgegeben wird
http_HEADER
is_args #如果有args参数 ist diese Variable gleich "?", ansonsten gleich "", Nullwert.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, meistens GET oder POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Benutzername vom Basic Module validiert.
request_completion #如果请求结束, stell es auf OK. Leer, wenn die Anfrage nicht abgeschlossen ist oder wenn die Anfrage nicht die letzte in der Anforderungskette ist.
request_method #GET或POST
request_filename #当前请求的文件路径, erzeugt durch Root- oder Alias-Direktiven und URI-Anfragen.
request_uri #包含请求参数的原始URI enthält sie nicht den Hostnamen, z. B. "/foo/bar.php?arg=baz". kann nicht modifiziert werden.
Scheme #HTTP方法 (z. B. HTTP, https).
server_protocol #请求使用的协议, meist HTTP/1.0 oder HTTP/1.1.
server_addr #服务器地址 kann dieser Wert nach Abschluss eines Systemaufrufs bestimmt werden.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Sieben. Korrespondenz zwischen den Apache- und Nginx-Regeln
Apache's RewriteCond entspricht Nginx', wenn
Apaches RewriteRule entspricht Nginx' Rewrite
Apaches [R] entspricht Nginx' Umleitung
[P] in Apache entspricht dem letzten in Nginx
Apaches [R,L] entspricht Nginx' Redirection
Apaches [P,L] entspricht Nginx' letzter
Apaches [PT,L] entspricht Nginx' letzter


Zum Beispiel erlauben Sie einer bestimmten Domain den Zugriff auf diese Seite und wenden Sie sich immer zu www.xx.com anderen Domainnamen
  Apache:
RewriteCond %{HTTP_HOST} !^(.*?) \.aaa\.com$[NC]
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP_HOST}!^192\.168\.0\. (.*?) $
RewriteRule ^/(.*)$ http://www.xx.com[R,L]


  Nginx:
if( $host ~* ^(.*)\.aaa\.com$ )
{
gesetzt $allowHost '1';
}
if( $host ~* ^localhost )
{
gesetzt $allowHost '1';
}
wenn( $host ~* ^192\.168\.1\.(. *?) $ )
{
gesetzt $allowHost '1';
}
wenn( $allowHost !~ '1' )
{
umschreiben ^/(.*)$ http://www.xx.comredirect ;
}





Vorhergehend:Sina Weibo scannt den Code, um 1 Cent zu zahlen und den Jahresendbonus bis 2015 Yuan zu erhalten.
Nächster:CMD5 knackt das Windows-Systemadministrator-Passwort
Veröffentlicht am 07.12.2014 17:25:05 |
Lesen und Zurückposten ist eine Tugend
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com