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?
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;
}
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 ^^