Nginx rewrite Regel für CodeIgniter
Hier ist die Regel in Englisch:
Jede HTTP-Anfrage sind andere als die für index.php assets Ordner, Dateien, Ordner und robots.txt wird behandelt wie eine Anfrage für Ihre index.php Datei.
Ich habe eine .htaccess
- Datei, die funktioniert einwandfrei auf Apache-server:
RewriteCond $1 !^(index\.php|assets|files|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
Einige korrekte Ergebnisse für diese Regel:
example.com
= example.com/index.php
example.com/index.php/welcome
= example.com/welcome
example.com/assets/css/main.css
!= example.com/index.php/assets/css/main.css
Ich habe versucht, einige tools zum konvertieren von htaccess-Regel für nginx in der Regel aber alle waren falsch.
Über http://winginx.com/htaccess (fehlende Ausnahme-Regeln für Asset-Ordner...):
location / { rewrite ^(.*)$ /index.php/$1 break; }
Über http://www.anilcetin.com/convert-apache-htaccess-to-nginx/ (Fehler in $1 Wert):
if ($1 !~ "^(index.php|assets|files|robots.txt)"){
set $rule_0 1$rule_0;
}
if ($rule_0 = "1"){
rewrite ^/(.*)$ /index.php/$1 last;
}
Wie kann ich dieses Problem beheben? Es ist wirklich schwer zu Debuggen, die Regel.
Hier ist meine nginx config so weit:
server {
listen 80;
server_name www.example.com example.com;
location / {
try_files $uri $uri//index.php?/$request_uri;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
- Was ist dein root Weg und der komplette Pfad mit dem codeigniter-Verzeichnis?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie fügen Sie diese an Ihre config:
Diese funktioniert einwandfrei mit Ihrer
location /
Regel.Deine config müssen auch hinzufügen Dokument-root und das Standard-index-Datei.
error_log /var/log/nginx/localhost.error_log debug; rewrite_log on;
in deine config, den server neu starten, dann versuchen, Sie laden eine Datei im Ordner "assets". Sagen Sie mir, wenn Sie einen Fehler sehen.open() "/etc/nginx/html/assets/..." failed (No such file or directory)
? Die Regel ist, fehlt etwas, das helfen nginx route zu korrigieren, web-Verzeichnis?root {$your_document_root};
$request_uri
durch$uri
als die letztere ist, normalisiert (siehe nginx.org/en/docs/http/ngx_http_core_module.html#variables). Damit das funktioniert, müssen Sie auch ändern Sie die regex-Filterung.php
Verarbeitung von Dateien, wie Sie derzeit nicht behandeln letzterem Fall ist von try_files, wie es von der Letomkov. Siehe mezcalito.fr/hebergement/labo-single/2011/01/... für eine akzeptable LösungSie dies tun möchten, statt:
"$request_uri ist für die original-URI-Anforderung durch den AUFTRAGGEBER. Wenn Sie möchten, dass die URI-Anfrage NACH der anderen Nginx rewrite Regeln bearbeitet haben, dann würden Sie "$uri. Aber für das, was Sie versuchen zu tun, die vor derjenige sein würde, der Sie haben möchte.
Außerdem müssen Sie spezielle escape-Zeichen für reguläre Ausdrücke wie
.
durch die Verwendung eines backslash.example.com
- 404,example.com/index.php
- OK,example.com/assets/css/main.css
- 404. Gibt es trotzdem kann ich Debuggen der Regel?location / { ... }
Regel mit Ihrer aktuellen Frage, aber es hat nicht funktioniert.location /
Regel. Aber wenn Sie eine Anfrage zu einem nicht-bestanden-Datei im assets Ordner, wird es noch laden müssenindex.php
- Datei.Bitte versuchen Sie dies. Es funktioniert für mich.