Heim >Backend-Entwicklung >PHP-Tutorial >Etwas über Nginx-Konfigurationsdateien und ReWriteUrl~
Anweisungen im Zusammenhang mit Nginx-Rewrite-Regeln
Anweisungen im Zusammenhang mit Nginx-Rewrite-Regeln umfassen „If“, „Rewrite“, „Set“, „Return“, „Break“ usw., wobei „Rewrite“ die kritischste Anweisung ist. Eine einfache Syntax für eine Nginx-Rewrite-Regel lautet wie folgt:
rewrite ^/b/(.*).html /play.php?video=$1 break;
Wenn Sie eine hinzufügen if-Anweisung, ein Beispiel lautet wie folgt:
if (!-f $request_filename)
rewrite ^/img/(.*)$ /site/$host/images/$1 last;
Vergleich von Rewrite-Regelbeispielen zwischen Nginx und Apache
Es gibt keinen großen Unterschied zwischen einfachen Nginx- und Apache-Rewrite-Regeln und sie sind grundsätzlich vollständig kompatibel. Zum Beispiel:
Apache Rewrite Rule:
RewriteRule ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 [L]
RewriteRule ^ / ceshi/$ /zl/ceshi.php [L]
RewriteRule ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 [ L]
RewriteRule ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 [L]
Nginx Rewrite Rule:
rewrite ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 last;
rewrite ^/ceshi/$ /zl/ceshi.php last;
rewrite ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 last;
rewrite ^/pingce([0-9]* ) /$ /zl/pingce.php?id=$1 last;
Wie aus dem obigen Beispiel ersichtlich ist, werden die Rewrite-Regeln von Apache in die Rewrite-Regeln von Nginx geändert. Es ist eigentlich sehr einfach: Die RewriteRule-Direktive von Apache ist Durch das Nginx-Tag ersetzt. In der Rewrite-Anweisung wird das [L]-Tag von Apache durch das letzte Tag von Nginx ersetzt, und der Inhalt in der Mitte bleibt unverändert.
Wenn Sie den Befehl nginx -t verwenden, um zu überprüfen, ob die Konfigurationsdatei nginx.conf Syntaxfehler aufweist, nachdem Sie die Rewrite-Regeln von Apache in die Rewrite-Regeln von Nginx geändert haben, können Sie versuchen, den Bedingungen Anführungszeichen hinzuzufügen. Beispielsweise meldet die folgende Nginx-Rewrite-Regel einen Syntaxfehler:
rewrite ^/([0-9]{5}).html$ /x.jsp?id=$1 last;
Hinzufügen Die Anführungszeichen sind korrekt:
rewrite „^/([0-9]{5}).html$“ /x.jsp?id=$1 last;
Die Rewrite-Regeln von Apache und Nginx sind in Es gibt subtile Unterschiede bei URL-Sprüngen:
Apache Rewrite Rule:
RewriteRule ^/html/tagindex/([a-zA-Z]+)/.*$ /$1/ [R=301 ,L]
Nginx Rewrite-Regeln:
rewrite ^/html/tagindex/([a-zA-Z]+)/.*$ http://$host/$1/ permanent;
Im obigen Beispiel ist uns aufgefallen, dass „http://$host“ zur Ersetzungszeichenfolge der Nginx-Rewrite-Regel hinzugefügt wurde, die in Nginx erforderlich ist.
Darüber hinaus unterscheiden sich die Rewrite-Regeln von Apache und Nginx auch in den Variablennamen, zum Beispiel:
Apache Rewrite-Regel:
RewriteRule ^/user/login/$ /user/ login.php ?login=1&forward=http://%{HTTP_HOST} [L]
Nginx Rewrite-Regeln:
rewrite ^/user/login/$ /user/login.php?login=1&forward =http: //$host last;
Die Entsprechung zwischen einigen Anweisungen und Tags mit gleichen oder ähnlichen Funktionen zwischen Apache und Nginx Rewrite-Regeln:
Apaches RewriteCond-Anweisung entspricht der if-Anweisung von Nginx;
Apache Die RewriteRule-Anweisung entspricht der Rewrite-Anweisung von Nginx;
Apaches [R]-Markierung entspricht der Nginx-Umleitungsmarkierung;
Apaches [R,L]-Markierung; mark Entspricht dem Weiterleitungs-Tag von Nginx;
Apaches [P, L]-Tag entspricht dem letzten Tag von Nginx;
lässt bestimmte Domänennamen zu Beim Besuch dieser Website springen alle anderen Domainnamen zu http://www.aaa.com
Apache Rewrite-Regeln:
RewriteCond %{HTTP_HOST} ^(.*?).domain.com$RewriteCond %{HTTP_HOST} !^qita.domain.com$
RewriteCond %{DOCUMENT_ROOT}/market/%1/index.htm -f
RewriteRule ^/wu/$ /market/%1/index .htm [L]
Die if-Anweisung von Nginx unterstützt weder die Verschachtelung noch den Abgleich mit mehreren Bedingungen wie AND und OR. Im Vergleich zu Apaches RewriteCond ist dies jedoch problematischer Seite Nginx-Konfigurationsschreibmethode zur Implementierung dieses Beispiels:
Nginx-Rewrite-Regel:
if ($host ~* ^(.*?).domain.com$) set $var_wupin_city $1; set $var_wupin '1′;
if ($host ~* ^qita.domain.com$)
set $var_wupin '0′;
if (!-f $document_root /market/$var_wupin_city/index.htm)
$var_wupin '0′ setzen;
if ($var_wupin ~ '1′)
^/wu umschreiben /$ /market/$var_wupin_city/index.htm last;
}Syntax:
Regex-Ersetzungsflag umschreibenStandard:
keineGeltungsbereich:
Server, Standort, wennDiese Direktive ändert den URI gemäß regulärer Ausdruck und die Ersetzungszeichenfolge werden in der Reihenfolge ihres Auftretens in der Konfigurationsdatei ausgeführt.
Diese Direktive ändert den URI oder modifiziert die Zeichenfolge basierend auf dem Ausdruck. Die Anweisungen werden entsprechend der Reihenfolge in der Konfigurationsdatei ausgeführt.
Beachten Sie, dass der Rewrite-Regex nur mit dem relativen Pfad und nicht mit der absoluten URL übereinstimmt. Wenn Sie den Hostnamen abgleichen möchten, sollten Sie eine if-Bedingung verwenden, etwa so:
Hinweis zum Umschreiben Der Ausdruck ist nur für relative Pfade gültig. Wenn Sie Hostnamen koppeln möchten, sollten Sie eine if-Anweisung verwenden.
rewrite schreibt nur den Pfadteil neu und ändert nicht die Eingabeparameter des Benutzers. Daher müssen Sie sich in der if-Regel hier nicht um die vom Benutzer im Browser eingegebenen Parameter kümmern Umschreiben. Deshalb haben wir gerade eins hinzugefügt? Nr. und einen kleinen Parameter, den wir später brauchen, ***https=1.
Nginx-Rewrite-Regelreferenz:
Beispiel für die Kombination von QeePHP
Mehrere Verzeichnisse in Parameter konvertieren
abc.domian.com/sort /2 => abc .domian.com/index.php?act=sort&name=abc&id=2
Verzeichnistausch
/123456/xxxx -> /xxxx?id=123456
Zum Beispiel leitet die folgende Einstellung nginx den Benutzer zum Verzeichnis /nginx-ie um, wenn er ie verwendet:
Das Verzeichnis wird automatisch mit „/“ hinzugefügt
htaccess verboten
Mehrere Verzeichnisse nicht zulassen
Dateien deaktivieren, die mit / beginnen data
kann deaktiviert werden. Anfragen wie .log.txt in mehrstufigen Verzeichnissen unter /data/;
Ein einzelnes Verzeichnis blockieren
.log.txt-Anfrage kann nicht gesperrt werden
Einzelne Dateien nicht zulassen
Legen Sie die Ablaufzeit für favicon.ico und robots.txt fest;
hier sind es 99 Tage für favicon.ico, robots.txt ist 7 Tage und zeichnet keine 404-Fehlerprotokolle auf
Speicherort ^~ /html/scripts/loadhead_1.js {
"rewrite ^/ http://leech.divmy.com/ leech.gif;“ zeigt ein Anti-Hotlink-Bild an
„access_log off;“ Keine Zugriffsprotokolle aufzeichnen, Stress reduzieren
„expires 3d“ Browser-Cache aller Dateien für 3 Tage
Nur festen IP-Zugriff auf die Website erlauben und Passwort hinzufügen
Dateien in mehrstufigen Verzeichnissen in eine Datei konvertieren, verbesserter SEO-Effekt
/job-123-456-789.html verweist auf /job/123/456/789.html
Ändern Sie das Stammverzeichnis Der nächste Ordner verweist auf das Verzeichnis der zweiten Ebene
, z. B. /shanghaijob/ verweist auf /area/shanghai/
Wenn Sie „Last“ auf „Permanent“ ändern, wird in der Adressleiste des Browsers /location/shanghai/
Wenn die tatsächliche Adresse von ./list_1.html beispielsweise /area/shanghia/list_1.html lautet, wird sie zu /list_1.html , wodurch es unzugänglich wird.
(-d $request_filename) Es gibt eine Bedingung, dass es sich um ein echtes Verzeichnis handeln muss, mein Umschreiben jedoch nicht, also hat es keine Auswirkung
给discuz某版块单独配置域名
discuz ucenter 头像 rewrite 优化
jspace rewrite
另外这里还有一个工具可以直接把apache规则转化为nginx规则
http: //www.anilcetin.com/convert-apache-htaccess-to-nginx/
参考:
http://wiki.nginx.org/NginxChsHttpRewriteModule
http ://blog.csdn.net/cnbird2008/archive/2009/08/04/4409620.aspx
http://www.divmy.com/
Die Verwendung von Nginx und der ReWriteUrl-App ist für die Verwendung mit PHP und PHP geeignet所帮助.