2 votes

Téléchargement des déclencheurs de réécriture de Nginx

J'ai du mal à créer une simple url de réécriture sur nginx.
Ma configuration ressemble à ceci :

location /foo/bar {
    rewrite ^/(.+)$ /index.php?p=$1 break;
}

Par exemple /foo/bar/baz devrait devenir /foo/bar/index.php?p=baz (en interne bien sûr)

Cependant, tout ce à quoi on accède par le biais de /foo/bar/ déclenche le téléchargement d'un index.php situé à la racine. Comment faire pour que cela fonctionne ?

J'ai également essayé d'utiliser try_files mais ne parvient pas à trouver comment exclure les /foo/bar/ chemin de $uri .

10voto

Chuan Ma Points 3191

Changement

rewrite ^/(.+)$ /index.php?p=$1 break;

a

rewrite ^/(.+)$ /index.php?p=$1 last;

Sur la base de http://wiki.nginx.org/HttpRewriteModule#rewrite ,

last - termine le traitement des directives de réécriture en cours et redémarre le processus (y compris la réécriture) avec une recherche de correspondance sur l'URI à partir de tous les emplacements disponibles.

[L'utilisation de la pause restera à l'intérieur du même bloc d'emplacement. Dans votre cas, il n'y a pas d'autres règles dans ce bloc d'emplacement. Donc par défaut, nginx va servir cette requête comme une requête de fichier.

0voto

Bart Points 7738

Le fichier PHP n'est pas interprété et traité comme un fichier normal. Vous devrez configurer un serveur CGI comme FPM et passer la connexion à ces processus.

Ver http://wiki.nginx.org/Configuration pour plus de détails

UPDATE

Je ne vois pas pourquoi votre exemple est cassé. Mais je pense que vous devez modifier le fichier rewrite en un try_files .

location /foo/bar {
    try_files $uri $uri/ /index.php?p=$uri;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X