Проблема 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, но в конце концов использовал пример выше,

Другие вопросы по тегам