web-dev-qa-db-fra.com

Règles de réécriture Nginx

J'ai quelques problèmes avec l'algorithme de réécriture Nginx pour WordPress.

J'utilise ceci pour la réécriture et cela fonctionne bien;

    server_name www.domain.com domain.com;
    if ($Host != 'domain.com') {
    rewrite ^/(.*)     http://domain.com/$1 permanent;
    } 

cela fait cette url;

http://domain.com/?author=1 

pour ça;

http://domain.com/author/username/

ce qui est bien mais avec une URL comme celle-ci;

http://domain.com/?author=1&type=like

ça le fait;

http://domain.com/author/username/?type=like

et je ne reçois aucune erreur mais la requête ne fonctionne pas.

Qu'est-ce qui me manque?

1
boranb

Les règles de réécriture Nginx correctes pour WordPress sont les suivantes:

location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

Cela envoie tout via index.php et conserve la chaîne de requête ajoutée.

Si vous utilisez PHP-FPM, vous devriez aussi ajouter ceci avant votre fastcgi_params comme mesure de sécurité:

location ~ \.php {
        try_files $uri =404;

      //  fastcgi_param ....
      //  fastcgi_param ....

      fastcgi_pass 127.0.0.1:9000;
}
4
Chris_O

Sachez que le caractère & situé entre $ uri '&' $ args est très important, car il fonctionnera partiellement sans lui, mais échouera dans certains cas.

Correct:

location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}

Faux:

location / {
    try_files $uri $uri/ /index.php?q=$uri$args;
}

La mauvaise méthode parviendra à gérer plusieurs arguments:

https://example.com?myvar=xxx&secvar=xxx // Will work

Mais échouer si un seul argument est passé:

https://example.com?myvar=xxx // Will NOT work

Cela me rendait vraiment difficile de trouver la faute de frappe, mais au moins j’ai appris quelque chose de nouveau ^^

1
Steffan