Redirection simple Nginx des produits de l'ancienne vers la nouvelle catégorie

9

Je redirige les produits de l'ancienne vers la nouvelle catégorie.

J'ai réussi à le faire fonctionner avec la règle suivante:

rewrite ^/old-category/(.*) /new-category/$1;

Mais je veux savoir quand dois-je utiliser le signe "fin de ligne" $ et quelle est la différence avec ou sans dans mon cas. Par exemple:

rewrite ^/old-category/(.*)$ /new-category/$1;

Je souhaite également rediriger les utilisateurs s'ils écrivent simplement l'ancien nom de la catégorie (sans produits), dois-je créer une nouvelle règle uniquement pour la redirection de catégorie ou je peux modifier la règle actuelle ci-dessus pour qu'elle fonctionne dans les deux cas.

Merci pour vos réponses à l'avance.

Analogtime
la source

Réponses:

9

Répondre à vos questions dans l'ordre ...

Cette

rewrite ^/old-category/(.*) /new-category/$1;

et ça

rewrite ^/old-category/(.*)$ /new-category/$1;

telles qu'elles sont écrites sont équivalentes. La .*règle correspond à 0 ou plus de "tout", donc $c'est redondant / pas vraiment nécessaire.

Le $terminateur est utile lorsque vous souhaitez faire correspondre des chaînes qui se terminent d'une manière spécifique , par exemple

rewrite ^/old-category/(.*)\.php$ /new-category/$1;

pour réécrire uniquement les fichiers PHP .

Quant à votre deuxième question, si j'ai bien compris, vous souhaitez rediriger cette

http://example.com/old-category/

pour ça

http://example.com/new-category/

Si c'est le cas, c'est déjà fait par la rewriterègle, car .*correspond à ZERO ou plusieurs caractères.

M. Shunz
la source
3
Bonne question, bonne réponse. Tant de gens définissent le $ par défaut (ou le laissent par défaut) sans penser à ce que cela signifie réellement. Chaque fois que je vois (. *) $ Je grince des dents. Je ne l'ai pas essayé, mais il se pourrait qu'en omettant le $ dans ce cas, les performances soient légèrement meilleures car c'est une autre règle que regex doit vérifier. Serait intéressant d'obtenir une réponse à cette question: D
Broco