ASP.NET / IIS7 Url重写映射不起作用

时间:2010-11-12 23:22:00

标签: asp.net iis-7 url-rewriting

我按照Learn IIS's webpage的说明添加了静态重定向,并为我的asp.net应用程序添加了重写映射。

以下是配置:

<rule name="Redirect rule1 for Information" stopProcessing="true">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{Information:{REQUEST_URI}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

<rewriteMaps>
    <rewriteMap name="Information">
        <add key="/Information/CorporateSales.aspx"
             value="/KB/Information/CorporateSales" />
        <add key="/Information/ComputerRepair.aspx"
             value="/KB/Information/ComputerRepair" />
    </rewriteMap>
</rewriteMaps>

这最初是由IIS管理员中的向导创建的,用于使用重写映射。

所以我的想法是/Information/CorporateSales.aspx - &gt; /KB/Information/CorporateSales具有301重定向(永久移动)。

然而,我只是加载原始的aspx页面(我们将在以后删除)。我甚至删除了文件,因为它默认为现有资源,而我只是得到一个没有重定向的普通404。

有人有想法吗?

让我澄清一下:

重写模块正常工作,已安装并正在运行。我的标准正则表达式规则运行良好。但我的重写地图却没有。

5 个答案:

答案 0 :(得分:6)

这篇文章http://www.iis.net/learn/extensions/url-rewrite-module/using-rewrite-maps-in-url-rewrite-module和下面的代码对我有用。

<rewrite>
    <rules>
        <rule name="Redirect rule1 for RedirectURLs">
            <match url=".*" />
            <conditions>
                <add input="{RedirectURLs:{REQUEST_URI}}" pattern="(.+)" />
            </conditions>
            <action type="Redirect" url="{C:1}" appendQueryString="false" />
        </rule>
    </rules>
    <rewriteMaps>
        <rewriteMap name="RedirectURLs">
            <add key="/privacy.php" value="/privacy" />
        </rewriteMap>
    </rewriteMaps>
</rewrite>

答案 1 :(得分:2)

我遇到了类似的问题并发现了这个问题。我花了一点时间,但我能够弄清楚问题是什么。

我的rewriteMap包含网址“/Default2.aspx”和“/Dashboard.aspx”。

当我去Default2.aspx时,我会得到一个404而不是按预期重定向到Dashboard.aspx。

我发现的问题是在我的机器上,应用程序在子目录中运行。只有当我使用完整路径(包括应用程序文件夹)时,rewriteMap路径才有效,例如“/TestSite/Default2.aspx”。

所以我可以在我的rewriteMap中添加重复的条目来考虑开发人员机器上的应用程序目录,但这看起来很麻烦。我查看了没有此问题的应用程序中的其他重写规则,我注意到他们使用的是{REQUEST_FILENAME}变量,而不是{REQUEST_URI}。所以我将规则切换为使用{REQUEST_FILENAME}并从我的rewriteMap中的url中删除第一个斜杠。

答案 2 :(得分:0)

您是否已将IIS重写安装为IIS7 / 7.5的一部分?默认情况下不会安装此选项。此外,请确保您的应用程序池设置为集成pipline模式,而不是经典模式。

修改

由此:

http://learn.iis.net/page.aspx/469/using-rewrite-maps-in-url-rewrite-module/

我唯一看到你正在做的是添加'stopProcessing'属性。你试过删除吗?

答案 3 :(得分:0)

以前我遇到的问题和你描述的一样。

您可以将代码更新为

<match url="(.*)" />

我希望你知道,

 <add input="{Information:{REQUEST_URI}}" pattern="(.+)" />

此条件将捕获除域以外的完整URL。 这个网址上的示例: www.example.com/Information/CorporateSales.aspx 它将检查匹配条件 重写地图上的Information/CorporateSales.aspx

并且肯定不会与此网址匹配

www.example.com/old/Information/CorporateSales.aspx

答案 4 :(得分:-5)

您是否重置了应用池和iis网站?

在某些情况下,全世界可能需要长达72小时(iirc)才能传播。