Nginx Standort match, in dem alle Dateiendungen außer php
Habe ich Folgendes in meiner nginx-config-Datei funktioniert es, aber ich will nicht zu haben, um die Liste jedes Datei-Erweiterung.
location ~ \.(gif|jpg|png|css|js|ttf|woff|html|htm|unity3d) {
try_files $uri /images/default.gif;
}
Gibt es eine Möglichkeit, dies alles mit Ausnahme von php-Dateien?
Edit: Aktualisierte Config
Die main-Datei:
server{
listen 80 default_server;
server_name _;
root /usr/share/nginx/html/$http_host;
index index.php index.html index.htm;
# location ~ \.(gif|jpg|png|css|js|ttf|woff|html|htm|unity3d|tpl) {
# try_files $uri /images/default.gif =404;
# }
location ~ .+(?<!\.php)$ {
location ~ ^[^.]+\.[^.]+$ {
try_files $uri /images/default.gif =404;
}
location ~ /{
try_files $uri $uri//index.html;
include /usr/share/nginx/conf/mission13.io.conf;
}
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Dann in der Datei enthalten:
if ($http_host = groups.mission13.io) {
rewrite ^(.+)$ /index.php?path=$1;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der PCRE-Bibliothek
Nginx nutzt die PCRE-Bibliothek in C geschrieben.
Es gibt eine riesige Mann Seite, ein bisschen schwer zu verstehen manchmal, aber Recht ausführlich.
Unter, finden Sie den look ahead /look hinter functionnalities, als würden Sie Sie finden in Perl.
Postive/negative look-ahead/behind
Positive/negative look-ahead/behind ermöglichen eine Zeichenfolge suchen, wenn man ein Teil davon ist/wird nicht gefolgt/vorangestellt Ausdruck. Blick hinter Ausdrücke sind beschränkt auf einen festen string, weil es nicht möglich für die meisten Implementierungen anwenden eines regulären Ausdrucks rückwärts, wie Sie benötigen, zu wissen, wie viele Schritte Sie gehen zurück zu diesem. Look-ahead nicht offensichtlich leiden diese Grenzen, so kann man einen regulären Ausdruck verwenden, wie Sie normalerweise tun.
Hier ist der relevante Abschnitt aus der Manpage :
Leider kann man nicht erfassen, das Ende der Schnur mit look ahead.
Blick hinter in Aktion
So, unser Erster Versuch wird mit negativen Blick hinter das Ende der Zeichenfolge :
Was bedeutet "Nur zu erfassen, Zeichenfolgen, die am Ende nicht mit
.php
". Das ist ganz in der Nähe, was wir brauchen bereits. Aber es gibt etwas mehr hinzu zu fügen, damit es funktioniert wie erwartet.Geschachtelten Orten
In der Tat, nichts garantiert, dass Sie eine Zeichenfolge, die eine Datei-Erweiterung an dieser Stelle. Es könnte vielmehr alles außer
^.+\.php$
. Um dies sicherzustellen, ist eine echte Datei-suffix, der auf Natürliche Weise zu überarbeiten, diese Grenze ist durch die Verwendung von geschachtelten Lage Blöcke, in denen die restriktivste Teil ist der apex. So wird unsere Konfiguration nun wie folgt Aussehen.... Und das ist es !
Ihre zweite Ausgabe
Hier sind meine Erläuterungen nach dem post-update für das zweite Problem, das Sie konfrontiert sind (404-Fehler auf andere URLs).
Als
~ .+(?<!\.php)$
passt alles außer\.php$
und Standorte verschachtelt sind, müssen Sie zum verschachteln der Position block/
auf und wandeln es in ein regex-match :Beachten Sie auch, dass Sie am Ende eine Endlosschleife mit der
try_files $uri /images/default.gif;
Teil, weil die letzten paremeter dertry_files
- Richtlinie ist ein interne Weiterleitung oder einen HTTP-code. Also, wenn/images/default.gif
nicht lösen, eine Datei, die Anfrage gehen Sie Trog diese Lage block 10 mal, bis nginx Stoppt die Bearbeitung und Rücksendung HTTP 500. So ändern Sietry_files $uri /images/default.gif =404;
.site.com/home
) andere als die Startseite (site.com
). Ich habe meine komplette config auf die Frage..php
unter der Lage, dass Filter alles, aber nicht die Anforderungen endend mit.php
? Nur die/
Lage haben geschachtelt werden. Mit diesem setup den php-Position wird nie erreicht, so nginx versucht, zu dienen, php-Dateien innerhalb des Servers zu blockieren root-Pfades, wie Sie waren statische Dateien.