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 einfach location = /index.php mit location ~ \.php, aber es wird dazu dienen, ohne dass Sie jede url mit der Zeichenfolge .php.
Schreibe einen Kommentar