8 votes

Comment faire pour que Nginx redirige toutes les demandes de fichiers qui n'existent pas vers un seul fichier php ?

J'ai la configuration suivante pour le serveur virtuel nginx :

server {
    listen 80 default_server;

    access_log /path/to/site/dir/logs/access.log;
    error_log /path/to/site/dir/logs/error.log;

    root /path/to/site/dir/webroot;
    index index.php index.html;

    try_files $uri /index.php;

    location ~ \.php$ {
            if (!-f $request_filename) {
                    return 404;
            }

            fastcgi_pass localhost:9000;
            fastcgi_param SCRIPT_FILENAME /path/to/site/dir/webroot$fastcgi_script_name;
            include /path/to/nginx/conf/fastcgi_params;
    }
}

Je veux rediriger toutes les requêtes qui ne correspondent pas à des fichiers existants vers index.php. Cela fonctionne bien pour la plupart des URI pour le moment, par exemple :

example.com/asd
example.com/asd/123/1.txt

Ni l'un ni l'autre asd o asd/123/1.txt existent donc ils sont redirigés vers index.php et cela fonctionne bien. Cependant, si je mets l'url example.com/asd.php il essaie de chercher asd.php et s'il ne le trouve pas, il renvoie 404 au lieu d'envoyer la demande à l'adresse suivante index.php .

Y a-t-il un moyen d'obtenir asd.php à envoyer également à index.php si asd.php n'existe pas ?

0voto

Roger Points 473

Richard, selon le guide Pitfalls, il est recommandé de définir "cgi.fix_pathinfo = 0 dans le php.ini, car cela résout un problème potentiel. vulnérabilité entre nginx et php.

0voto

vladkras Points 171

Je veux rediriger tous les fichiers php manquants vers un fichier interne personnalisé. /error404 page d'erreur. Je vais poster ma solution trouvée pendant la permutation.

error_page 404 /error404;

ne m'a pas aidé. Pas plus que les combinaisons de location , @missing , rewrite y break . Mais

location ~ \.php$ {
    # this is it! $fastcgi_script_name points to my url
    try_files $fastcgi_script_name = /error404; 
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
    ...
    etc.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X