web-dev-qa-db-fra.com

(nginx rewrite) ajoute Word à la fin de l'URL dynamique | Word est répété plusieurs fois dans l'URL

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?

2
Nintendo64
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.

1
MrWhite