【问题标题】:IIS7 web.config file is not supporting redirects and 404 at the same timeIIS7 web.config 文件不支持重定向和 404 同时
【发布时间】: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


【解决方案1】:

您的配置很好——这里没有问题。

尝试回收应用程序池..或重新启动 IIS 服务。

【讨论】:

  • 如果这不起作用:确保您实际使用的是 IIS!对我有用的是转到项目的属性,选择 Web 选项卡,然后将“使用 Visual Studio 开发服务器”更改为“使用本地 IIS Web 服务器”,并接受(在我的情况下)“使用 IIS”的默认子设置Express”和项目网址“localhost:52246”。
猜你喜欢
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 2013-05-20
  • 2019-03-12
  • 2012-05-11
  • 1970-01-01
相关资源
最近更新 更多