Je suis vraiment dérouté par les règles de réécriture de Nginx. J'ai cherché et trouvé beaucoup de threads pour les règles de réécriture, mais je n'obtiens pas le résultat requis ...
J'ai cette forme de lien:
http://example.com/picture/587
devrait réécrire à:
http://example.com/picture/587-specialword
le numéro est dynamique et change d'URL en URL et seules les URL avec le mot "image" doivent être affectées.
Alors j'ai essayé ces:
rewrite ^/picture(.*) /picture$1specialword permanent;
rewrite ^(.*)picture(.*)$ $1picture$2specialword;
qui ne fonctionnent pas ... et j'obtiens ce résultat qui conduit à une erreur:
http://example.com/picture/587specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword&specialword
Ainsi, le mot qui a été ajouté une fois est ajouté plusieurs fois.
Existe-t-il une solution à ça? Qu'est-ce que je fais mal?
rewrite ^/picture(.*) /picture$1specialword permanent;
Cela semblerait résulter en une boucle de redirection puisque (.*)
correspondra à l'URL redirigée, qui reçoit ensuite "mot spécial" ajouté à plusieurs reprises, etc.
Vous pouvez éviter cette boucle en étant plus précis dans votre expression rationnelle et en ne vérifiant que ce dont vous avez besoin, c.-à-d. un numéro. Essayez quelque chose comme ce qui suit:
rewrite ^/picture/(\d+)$ /picture/$1-specialword permanent;
Je suppose que vous voulez une redirection externe (c'est-à-dire que l'URL dans la barre d'adresse devrait changer) et non une réécriture interne?
Vous devrez vider le cache de votre navigateur avant de tester, car les redirections permanentes (301) sont mises en cache par le navigateur.