nginx rewrite: alles, aber leere Basis-url
Nach über 2 Stunden googeln und versuchen verschiedene Dinge, ich Wende mich an Sie um Hilfe.
Aufgabe:
Schreiben Sie die leere url zu etwas, und alles, was sonst noch auf etwas anderes in der nginx.
So, wenn ich navigieren Sie zu subdomain.somedomain.tld, ich möchte, serviert den index.php und wenn ich gehe, um subdomain.somedomain.tld/BlAaA, ich bekommen umgeleitet zu indizieren.php?url=BlAaA. Ausnahmen sind die Dateien unter /img /umfassen, und die index.php selbst. Sie werden nicht umgeschrieben.
Der zweite Teil funktioniert bereits, ebenso wie die whitelist, aber ich kann nicht herausfinden, oder etwas zu erreichen, die ganze Idee.
Den arbeiten Teil:
server {
listen 80;
server_name subdomain.domain.tld;
location /{
include php.conf;
root /srv/http/somefolder/someotherfolder/;
if ( $uri !~ ^/(index\.php|include|img) ){
rewrite /(.*) /index.php?url=$1 last;
}
index index.php;
}
}
Die Antwort von @pablo-b fast mein problem gelöst.
Nur zwei Probleme mit diesem Ansatz: 1: PHP-FPM jetzt braucht, um die Erweiterungen der Dateien unter /include/(z.B. style.css, background.jpg) in /etc/php/php-fpm.conf unter Sicherheit.limit_extensions. Meine ursprüngliche php.conf gearbeitet, entlang der Linien von
location ~ \.php {
#DO STUFF
}
die nginx nicht gerne, da es irgendwie überschreibt den Speicherort /index.php ein Teil von Ihrem Vorschlag. Kann ich dass umgehen, obwohl, da genug Zeit.
2: $request_uri Erträge "/was auch immer", nicht "was auch immer", als Wert auf meine url= parameter. Ich kann analysieren "/" in meinem php-code, das ist sicher, aber meine ursprüngliche Lösung nicht hinzufügen, das führende "/". Alle eleganten Weg um dieses Problem zu lösen?
- Ich fügte hinzu, entfernen der
/
Teil, obwohl es scheint nicht sehr elegant (performance-wise, ist die Zuordnung geschieht nur, wenn$uri_without_slash
ist der Zugang). Wie 1), können Sie ersetzen Sie einfachlocation = /index.php
mitlocation ~ \.php
, aber es wird dazu dienen, ohne dass Sie jede url mit der Zeichenfolge.php
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, Vermeidung
if
und arbeiten mit verschiedenen Standorten nutzen, die Rangfolge, die im Zusammenhang mit der pattern-matching-Methoden verwendet (docs):Und in einer separaten config-Datei namens
common_settings
:EDIT: Hinzugefügt Entfernung der ersten slash in der url:
In deiner conf, außerhalb der
server
Richtlinie: