【发布时间】:2011-09-02 08:52:29
【问题描述】:
我已经编写了一个用于站点的外部重定向文件。重定向工作完美,但是当我添加 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>
【问题讨论】:
-
在这里工作得很好。尝试回收应用程序池..或重新启动 IIS 服务
-
枪之子!那行得通。请添加您的评论作为答案,以便我接受。非常感谢!
标签: iis-7 url-rewriting