Перенаправление Isapi Rewrite 301 разрешается как 404 – циклическая ссылка?

StackOverflow https://stackoverflow.com/questions/1048676

Вопрос

Я пытаюсь использовать IIS Isapi Rewrite, чтобы сделать следующее...

Мне нужно, чтобы URL-адреса, оптимизированные для SEO, были (тихо) преобразованы обратно в URL-адреса, удобные для приложений, например:

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

Достаточно просто.

Но мне также нужно, чтобы URL-адреса, уже проиндексированные в поисковых системах (например), перенаправлялись с кодом 301 на оптимизированную для SEO версию.Вот так:

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

Каждый из них прекрасно работает по отдельности.Но когда оба файла есть в моем .ini-файле, в адресной строке браузера отображается /seo-Friendly-url/, но мне выдается ошибка 404.(Да, /test/index.cfm определенно существует!)

Я знаю, что это похоже на циклическую ссылку, но первое правило перезаписывает только URL-адрес между IIS и приложением — перенаправления нет, поэтому я не нажимаю Isapi Rewrite во второй раз.Или я ошибаюсь в этом?

Я включил ведение журнала в Isapi Rewrite и вижу следующее:

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

У кого-нибудь есть идеи?

Это было полезно?

Решение 2

Путем проб и ошибок я нашел решение этой проблемы.

Укажите, что совпадение перенаправления находится в конце строки, используя символ $:

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

Сделайте переписанный URL тривиально отличным от строки соответствия перенаправления - в этом случае добавьте ненужный "?":

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

Другие советы

У вас есть две разные перезаписи, и это должно сработать, если вы все сделаете правильно.

  1. Первый из них никогда не виден клиентскому пользовательскому агенту.Он запрашивает /seo-Friendly, и вы переписываете его внутри себя и отвечаете.

  2. Второй на самом деле не перезапись, а перенаправление.Вы отправляете это обратно клиенту, и он повторно запрашивает /seo-Friendly - я думаю, вам нужно использовать [R=301,L], чтобы сказать, что это конец строки - просто верните его (L делает что)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top