Файл IIS7 web.config не поддерживает перенаправления и 404 одновременно - PullRequest
2 голосов
/ 02 сентября 2011

Я написал внешний файл перенаправления для использования на сайте. Перенаправление работает отлично, но когда я добавляю правило 404, перенаправление прерывается. В этот момент 404 работает, но редирект не работает. Я также пытался сохранить правила перенаправления внутри файла web.config (а не в виде отдельного файла), но это тоже не работает.

Может кто-нибудь понять, как я могу заставить мои перенаправления и 404 правила работать в тандеме?

Ниже приведен код для перенаправления в файле web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rewriteMaps configSource="rewritemaps.config" />
            <rules>
                <rule name="Redirect rule1 for Redirects">
                    <match url=".*" />
                    <conditions>
                       <add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" />
                    </conditions>
                    <action type="Redirect" url="{C:1}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Внешний файл, указанный выше, выглядит следующим образом:

<rewriteMaps>  
    <rewriteMap name="Redirects">  
        <add key="/old_page.html" value="/new_page.html" />  
    </rewriteMap>  
</rewriteMaps>

На данный момент все отлично работает. Однако, как только я добавлю следующее, 404 прекрасно работает, но перенаправление не работает.

<httpErrors>
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" prefixLanguageFilePath="" path="/page-not-found.html" responseMode="ExecuteURL" />
</httpErrors>

Общий код, который не работает, выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rewriteMaps configSource="rewritemaps.config" />
            <rules>
                <rule name="Redirect rule1 for Redirects">
                    <match url=".*" />
                    <conditions>
                       <add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" />
                    </conditions>
                    <action type="Redirect" url="{C:1}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
        <httpErrors>
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" path="/page-not-found.html" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

1 Ответ

0 голосов
/ 02 сентября 2011

Ваш конфиг в порядке - здесь никаких проблем.

Попробуйте переработать пул приложений .. или перезапустите службу IIS.

...