Переписать карты в IIS7 - без перенаправления

Я пытаюсь использовать отдельный файл конфигурации с именем «rewritemaps.config», который содержит URL-адреса, которые я хочу перенаправить. Файл находится в корневом каталоге (там же, где находится файл web.config). Формат файла Redirects.config, который у меня есть:

<rewriteMaps>
    <rewriteMap name="Redirects">
        <add key="aspx/drvmain.aspx"
             value="http://www.newdomain.com/folder2/page2.aspx" />
        <add key="aspx/jobs_AboutUs.aspx"
             value="http://www.newdomain.com/folder1/jobs.aspx" />
        <add key="aspx/page.aspx"
             value="http://www.newdomain.com/folder1/page2.aspx" />
    </rewriteMap>
</rewriteMaps>

В моем файле web.config у меня есть:

<system.webServer>
    <rewrite>
        <rewriteMaps configSource="rewritemaps.config" />
            <rules>
                <rule name="Redirect rules">
                    <match url=".*" />
                    <conditions>
                        <add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" />
                    </conditions>
                    <action type="Redirect" redirectType="Permanent"
                            url="{C:1}" appendQueryString="false" />
                </rule>
            </rules>
        </rewriteMaps>
    </rewrite>
</system.webServer>

В диспетчере IIS (который, да, я установил модуль перезаписи URL-адресов) я даже протестировал правило и условие для одного из моих URL-адресов в файле redirects.config, и он говорит, что он работает. Но затем, когда я пытаюсь перейти по URL-адресу в своем браузере, он не перенаправляется, как я указал. В файле rewritemaps.config я попытался указать полный домен и попытался использовать «/» перед aspx. Кажется, ничего не работает. Я не уверен, что мне здесь не хватает.


person Kurt    schedule 11.01.2013    source источник


Ответы (2)


Ну у меня заработало. Было что-то глупое. В файле rewritemaps.config мне нужны «/» перед URL-адресом ключа. Я знаю, что пробовал это раньше, но я, должно быть, упустил что-то еще в то время. Ну что ж. Теперь это работает.

person Kurt    schedule 11.01.2013
comment
Если это поможет вам почувствовать себя лучше, я сам сделал то же самое на прошлой неделе :) - person Owen Blacker; 24.03.2014
comment
Кажется, что файл rewritemaps.config может быть довольно сильно кэширован, поэтому внесение в него изменений не всегда эффективно. Убедитесь, что пул приложений переработан (например, «touch» web.config) после внесения изменений. - person Dan; 04.11.2015

Очень сложно определить, почему это не удается, но лучшее, что вы можете сделать, это использовать отслеживание неудачных запросов, чтобы IIS сообщал вам, что происходит. С FREB вы получите подробную трассировку, сообщающую вам, какие правила были оценены, и если они совпали или нет, и почему нет. Вы также можете увидеть «правильные» шаблоны для сопоставления и каждое оцениваемое условие.

См. следующую ссылку: http://www.iis.net/learn/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules

person Carlos Aguilar Mares    schedule 11.01.2013
comment
Ну, я сделал это, и я думаю, что это говорит о том, где он терпит неудачу, но я до сих пор не знаю, почему. Похоже, что он соответствует шаблону правила (то есть PATTERN MATCH говорит Matched="true". Но тогда оценка условий дает сбой (CONDITIONS_EVALUATION_END равно Succeeded="false"). Как я уже упоминал, когда я беру запрошенный URL-адрес и проверяю его в шаблоне в IIS, он говорит, что он соответствует шаблону (в основном, aspx/drvmain.aspx соответствует (.+), когда я его тестирую, но не когда он фактически запускается через браузер). - person Kurt; 11.01.2013