2 votes

Nginx try_files ne déclenche pas de réponse depuis index.php

J'ai un problème avec try_files qui ne semble pas transmettre les requêtes pour des fichiers inexistants à la dernière valeur spécifiée, dans mon cas index.php. J'utilise Wordpress et le plugin XML Sitemap generator que j'utilise crée des fichiers XML virtuels et un robots.txt virtuel qui est géré par Wordpress. Malheureusement, try_files ne semble pas transmettre les requêtes pour ces fichiers à Wordpress.

Voici la configuration de mon serveur :

server {
        ## Web domain
        server_name christiaanconover.com;
        ## Site root
        root /var/www/christiaanconover.com;
        ## Index
        index index.php index.htm;

        ## Common Wordpress configuration
        include wp.conf;

        ## Include PHP configuration
        include php.conf;

        ## Gzip Compression
        include gzip.conf;

        ## Include W3TC configuration
        include /var/www/w3tc/christiaanconover.com;
}

Je fais tourner plusieurs sites Wordpress sur ce serveur, donc pour gagner du temps, j'ai créé un fichier wp.conf qui contient tous les éléments de configuration couramment utilisés pour Wordpress. Voici le contenu de wp.conf :

location / {
        ## Prevent PHP files from being served as static assets, and fall back to index.php if file does not exist
        try_files $uri $uri/ /index.php?$args;

        ## If a file exists, serve it directly
        if (-f $request_filename) {
                break;
        }

        ## Wordpress Rewrite
        if (!-e $request_filename) {
                rewrite ^ /index.php last;
        }
}

Tout le reste fonctionne parfaitement, mais l'arrangement try_files ne semble pas fonctionner correctement. Des idées ?

7voto

cobaco Points 2981

Vous rencontrez l'un des problèmes décrits à l'adresse suivante http://wiki.nginx.org/IfIsEvil#Examples

les ifs que vous avez spécifié dans le wp.conf sont inutiles, vous les avez déjà couvertes avec votre try_files Il suffit donc de les retirer pour qu'ils cèdent :

location / {try_files $uri $uri/ /index.php$is_args$args;}

qui le fera :

  1. vérifie si un fichier correspondant à $uri (relatif à l'emplacement spécifié par la directive Root) existe
  2. si ce n'est pas le cas, vérifier si le répertoire correspondant existe
  3. sinon rediriger vers /index.php$is_args$args

$is_args s'évalue à ? quand $args est défini.

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