Проблема IIS UrlRewrite
Я использую плагин UrlRewrite IIS около месяца на нашей производственной площадке.
Я создал одно правило перенаправления, используя предоставленный шаблон / мастер, в результате чего конфигурация enrty выглядит следующим образом:
<rewrite>
<rules>
<rule name="CanonicalHostNameRule1" enabled="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.mycompany\.com$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.mycompany.com/{R:1}" />
</rule>
</rules>
</rewrite>
Он работал нормально до сегодняшнего утра, когда сайт начал из-за "слишком много перенаправлений". Насколько я знаю, ничего в конфигурации или инфраструктуре не изменилось.
Я отключил правило, и сайт снова стал функционировать (хотя явно без перенаправления).
Затем я снова включил правило, и теперь все работает, как ожидалось. Я не внес никаких изменений в правило, кроме как временно отключить его.
Есть идеи? Плагин глючит?
3 ответа
Я бы порекомендовал настроить это:
http://learn.iis.net/page.aspx/467/using-failed-request-tracing-to-trace-rewrite-rules/
Это может помочь вам отследить проблему, если вы снова начнете получать ошибку "слишком много директив".
Исправление ниже работает для меня. Я обнаружил, что мое правило перезаписи устарело. Другой домен изменил свою политику URL и теперь перенаправлял весь трафик с otherdomain.com на www.otherdomain.com
<action type="Rewrite" url="http://otherdomain.com/abc/{R:1}" />
в
<action type="Rewrite" url="http://www.otherdomain.com/abc/{R:1}" />
Вы видите разницу? Добавив "www", я вытеснил перенаправление другого домена. Я в основном просто выполнил их новую политику.
Попробуйте этот другой код, у меня есть в Интернете и отлично работает:
<rule name="Canonical Host Name" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^yourdomain\.com$" />
</conditions>
<action type="Redirect" url="http://www.yourdomain.com/{R:0}" redirectType="Permanent" />
</rule>
Объяснение простое: сопоставить любой URL-адрес, полученный для обработки. Условие состоит в том, чтобы иметь anydomaintext.extension (ваш домен и расширение) без префикса. Перенаправить на тот же домен с полным префиксом и ввести все URL-адреса.
Другими попытками был R:1, но он вышел из основного URL и не запустился. Образец от Руслани: http://blogs.iis.net/ruslany/archive/2009/04/08/10-url-rewriting-tips-and-tricks.aspx Я пытался использовать добавление www, но в конце концов использовал пример выше,