Не удается получить статические перенаправления для работы с IIS Url Rewrite 2.0 - PullRequest
1 голос
/ 01 ноября 2011

Запуск следующей настройки IIS URL Rewrite локально и не может заставить ее работать (из web.config):

        <rewrite>
        <rewriteMaps>
            <rewriteMap name="StaticRedirects">
                <add key="^tvb/" value="/tv/" />
            </rewriteMap>
        </rewriteMaps>
        <rules>
            <rule name="StaticRedirectsRule" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <add input="{StaticRedirects: {REQUEST_URI}}" matchType="Pattern" pattern="(.+)" ignoreCase="true" negate="false" />
                </conditions>
                <action type="Redirect" url="{C:1}" appendQueryString="true" />
            </rule>
        </rules>
    </rewrite>

Попытка открыть URL http://localhost/tvb/ или http://localhost/tvb/?a=b возвращает ошибку 404 вместо перенаправления меня на http://localhost/tv (со строкой запроса или без нее).

Я нашел подобные сообщения здесь на stackoverflow, и я попробовал то, что они рекомендовали: переработка пула приложений, перезапуск службы IIS, замена REQUEST_URI на URL и / или REQUEST_FILENAME, но ни одно из этих изменений не изменило.

Кто-нибудь может увидеть, где я ошибся?

Ответы [ 2 ]

5 голосов
/ 02 ноября 2011

Ну, мне удалось найти решение для этого самостоятельно, поэтому вот что я сделал:

Во-первых, кажется, что rewriteMap не поддерживает регулярные выражения, поэтому это не работает:

<add key="^tvb/" value="/tv/" />

вместо этого должно быть так:

<add key="/tvb/" value="/tv/" />

Кроме того, похоже, что переменная IIS7 REQUEST_URI изменила поведение с момента выпуска модуля Url Rewrite 2.0 (и документации).

Ранее REQUEST_URI включал только путь URL, без домена и строки запроса.

Теперь, очевидно, REQUEST_URI в IIS7 работает так же, как и в Apache, то есть он также включает строку запроса, поэтому неудивительно, что эта часть не работает:

<add input="{StaticRedirects: {REQUEST_URI}}" ... />

Вместо этого мне пришлось изменить это на:

<add input="{StaticRedirects: {SCRIPT_NAME}}" ... />

А теперь перенаправления работают как со строками запроса, так и без них!

Надеюсь, это кому-нибудь поможет.

Только что обнаружил это на сервере: IIS Rewrite, переписать карты и строки запроса .

0 голосов
/ 07 августа 2017

У меня была та же проблема, и замена REQUEST_URI на PATH_INFO устранила проблемы.

Вот ссылка https://forums.iis.net/post/1883056.aspx

Рассуждение: «Это потому, что REQUEST_URI содержит весь запрошенный URL, который включает строку запроса. Поскольку ключи в карте перезаписи не содержат строку запроса, поиск карты завершается неудачей. '

...