Question

J'essaie d'utiliser IIS Isapi Rewrite pour effectuer les opérations suivantes ...

J'ai besoin que les URL conviviales soient reconverties (en mode silencieux) en URL conviviales pour les applications, comme ceci:

RewriteRule ^/seo-friendly-url/ /test/index.cfm [I,L]

Assez simple.

Mais j'ai également besoin que les URL déjà indexées dans les moteurs de recherche (par exemple) soient 301 redirigées vers la version conviviale. Comme si:

RewriteRule ^/test/index.cfm    /seo-friendly-url/ [I,R=301]

Chacune de ces méthodes fonctionne bien de manière isolée. Mais quand j'ai les deux dans mon fichier .ini, je me retrouve avec / seo-friendly-url / dans la barre d'adresse de mon navigateur, mais on me sert un 404. (Oui, /test/index.cfm existe définitivement!)

Je sais que cela ressemble à une référence circulaire, mais la première règle ne réécrit que l'URL entre IIS et l'application - il n'y a pas de redirection, je ne frappe donc pas Isapi Rewrite une seconde fois. Ou est-ce que je me trompe?

J'ai activé la journalisation sur Isapi Rewrite et le message suivant s'affiche:

HttpFilterProc SF_NOTIFY_PREPROC_HEADERS
DoRewrites
New Url: '/seo-friendly-url/'
ApplyRules (depth=0)
Rule 1 : 1
Result (length 15): /test/index.cfm
ApplyRules (depth=1)
Rule 1 : -1
Rule 2 : 1
Result (length 18): /seo-friendly-url/
ApplyRules: returning 301
ApplyRules: returning 1
Rewrite Url to: '/seo-friendly-url/'

Quelqu'un a des idées?

Était-ce utile?

La solution 2

Après quelques essais et erreurs, j'ai trouvé une solution à ce problème.

Spécifiez que la correspondance de redirection se trouve à la fin de la chaîne à l'aide du symbole $:

RewriteRule ^/test/index.cfm$    /seo-friendly-url/ [I,R=301]

Faites en sorte que l'URL réécrite soit trivialement différente de la chaîne de correspondance de redirection - dans ce cas, ajoutez un "??! " inutile:

RewriteRule ^/seo-friendly-url/ /test/index.cfm? [I,L]

Autres conseils

Vous avez deux réécritures différentes ici et cela devrait fonctionner si vous le faites correctement

  1. Le premier n'est jamais vu par l'agent utilisateur du client. Il demande / seo-friendly et vous le réécrivez en interne et répondez

  2. Le second n'est pas vraiment une réécriture, mais une redirection. Vous renvoyez cela au client et il demande à nouveau à / seo-friendly - je pense que vous devez utiliser [R = 301, L] pour indiquer que ceci est la fin de la ligne - il suffit de le renvoyer (L ça)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top