Pregunta

Estoy tratando de usar IIS Isapi Rewrite para hacer lo siguiente ...

Necesito que las URL seo-amigables se conviertan (silenciosamente) nuevamente en URL amigables para la aplicación de esta manera:

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

Suficientemente simple.

Pero también necesito que las URL ya indexadas en los motores de búsqueda (por ejemplo) se redirijan 301 a la versión amigable para SEO. Me gusta así:

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

Cada uno de estos funciona bien de forma aislada. Pero cuando tengo ambos en mi archivo .ini termino con / seo-friendly-url / que aparece en la barra de direcciones de mi navegador, pero me aparece un 404. (¡Sí, /test/index.cfm definitivamente existe!)

Sé que parece una referencia circular, pero la primera regla solo reescribe la URL entre IIS y la aplicación; no hay redirección, por lo que no voy a presionar Isapi Rewrite por segunda vez. ¿O me equivoco al respecto?

He habilitado el inicio de sesión en Isapi Rewrite y veo lo siguiente:

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/'

¿Alguien tiene alguna idea?

¿Fue útil?

Solución 2

A través de alguna prueba y error, he encontrado una solución para esto.

Especifique que la coincidencia de redireccionamiento se encuentra al final de la cadena con el símbolo $:

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

Haga que la URL reescrita sea trivialmente diferente de la cadena de coincidencia de redireccionamiento; en este caso, agregue un "? " ;:

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

Otros consejos

Aquí tiene dos reescrituras diferentes y debería funcionar si lo hace correctamente

  1. El primero nunca es visto por el agente de usuario del cliente. Solicita / seo-friendly y lo reescribe internamente y responde

  2. El segundo no es realmente una reescritura, sino una redirección. Envías eso al cliente y vuelve a solicitar el / seo-friendly. Creo que necesitas usar [R = 301, L] para decir que este es el final de la línea, solo devuélvelo (L lo hace eso)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top