我按照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。
有人有想法吗?
让我澄清一下:
重写模块正常工作,已安装并正在运行。我的标准正则表达式规则运行良好。但我的重写地图却没有。
答案 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)才能传播。