2012-04-07 7 views
2

Ich war neugierig zu wissen, ob es irgendwie möglich war, nginx so zu konfigurieren, dass es URL-Argumente ohne Angabe von .php am Ende des Dateinamens analysiert, bevor die Argumente gesendet werden.Nginx mit sauberen URLs, Parameter abrufen und PHP-FPM

Zum Beispiel, ich habe ein Konto-Modul, das basierend auf dem Argument verarbeitet, welcher Aspekt des Kontos geladen werden soll. Wenn das Argument ?sk='login' ist, wird das Login-Modul geladen. Wenn es ?sk='register' ist, wird es das Registrierungsmodul laden - und so weiter und so fort.

Das Problem ist, dass, wenn ich http://host/account?sk='login' eingeben, bekomme ich nichts über $_GET, wenn ich versuche, die Werte innerhalb des Arrays zu drucken. Die Sache ist, dass die saubere URL lädt die Datei, die die $_GET Argumente verwalten soll, außer es wird nicht Prozess$_GET, es sei denn, ich gebe .php am Ende des Dateinamens.

Ich vermute, es gibt eine Nginx oder PHP-FPM-Konfiguration irgendwie, die dies ermöglicht.

Ist das möglich?

+0

Ist 'account' eigentlich' account.php', oder gibt es einen Frontcontroller bei 'index.php', der das URL-Routing behandelt? – mrlee

+0

ist es eigentlich 'account.base.php', aber nginx behandelt die URL-Rerouting über' location' Blöcke. – zeboidlund

+1

@hakre sorgen, um die Liebe zu verbreiten und zu zeigen, wie es gemacht wird? – zeboidlund

Antwort

1

ich es herausgefunden:

Die Idee, mit nginx, ist eine Position zu definieren, das Standort der Wurzel an, und dann ein try_files zu tun, während die $uri Variable spezifizieren und die .php Datei auszuführen, mit die Argumente.

Zum Beispiel:

location /somelocation { 
    root /path/to/somelocation/on/server; 
    try_files $uri /somelocation/somefile.php?key=$args; 
} 

Anstatt http://host/somelocation?key='someargument' eingeben, Sie /somelocation?someargument

Von dort geben würde, wenn Sie $_GET[ 'key' ] in Ihrer PHP rufen, wird es ausgegeben someargument mit einem Schlüssel von key. Der Schlüssel kann sein, was auch immer Sie angeben.

+0

Lesen Sie dies vor der Implementierung dieser Antwort https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#root-inside-location-block – Henno

Verwandte Themen