Перенаправление Isapi Rewrite 301 разрешается как 404 - циклическая ссылка? - PullRequest
3 голосов
/ 26 июня 2009

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

Мне нужны SEO-дружественные URL-адреса для (без вывода сообщений) конвертации обратно в дружественные 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 ]

0 голосов
/ 30 июня 2009

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

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

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

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

RewriteRule ^/seo-friendly-url/ /test/index.cfm? [I,L]
0 голосов
/ 26 июня 2009

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

  1. Первый никогда не виден клиентским пользовательским агентом. Он запрашивает / дружественный к SEO, и вы переписываете его внутренне и отвечаете

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

...