Comment annuler ces loos Nginx?

J'ai des problèmes de réécriture Nginx.

DANS Apache J'ai eu la prochaine écrasement, qui a redirigé toutes les demandes qui n'ont pas demandé le dossier PHP, sur index.php:

Options +FollowSymLinks 
RewriteEngine on
RewriteRule !^(.*)\.php$ ./index.php [QSA,L]

La même chose devrait fonctionner sur Nginx, Mais ce n'est pas. Cette écrasement ne fait rien (jette 404 Pages pour chaque demande):

rewrite !^(.*)\.php$ ./index.php last;

Mais si je supprimais une marque d'exclamation, la réécriture va vraiment fonctionner, faisant le contraire (Il redirigera toutes les demandes de fichiers. * .php déposer. index.php):

rewrite ^(.*)\.php$ ./index.php last;

Pourquoi l'inverse ne fonctionne pas dans Nginx, Comment Apache? Que devrais-je changer? Un avec une marque d'exclamation donne une erreur 404, Soit le fichier d'entrée n'est pas spécifié. " Les erreurs.
Invité:

Christine

Confirmation de:

Utilisez une paire de blocs Location. Sorte de:

location ~ *.php$ { }

location / {
rewrite ^(.*)$ ./index.php last;
}

Le premier doit attraper tous les fichiers se terminant par .php, Et juste avoir accès à eux. La seconde interceptera tout le reste et réécrirea dans ./index.php.

Christine

Confirmation de:

C'était la bonne décision:

# Make sure to set this as your actual server WWW root
root html;

# Index file
index index.php;

# Rewrite that directs everything, except PHP to index file
# Make sure you place this before your "location ~ \.php$ {" for the server configuration.
location / {
rewrite ^ ./index.php last;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

En substance, le premier dit que tout devrait être dirigé vers PHP, Et le deuxième bloc d'emplacement - Ceci est votre directive typique. PHP. Donc, dès que la première écrasement se produit, cela provoquera la seconde (Donc, PHP).

Pour répondre aux questions, connectez-vous ou registre