URL重写和IIS Express:一些规则有效,有些则无效

时间:2012-01-06 12:10:53

标签: asp.net-mvc url-rewriting iis-express

我正在使用IIS Express开发一个MVC 3应用程序,它正在web.config中进行一些URL重写。我遇到了一些奇怪的问题,其中一些规则完美无缺,而其他规则则失败了。

例如,这个有效:

<rule name="Remove ETag">
 <match serverVariable="RESPONSE_ETag" pattern=".+" />
 <action type="Rewrite" value="" />
</rule>

(来源:https://stackoverflow.com/a/8089525/88709

这个没有(在第二行给出Unrecognized attribute 'url'):

<rule name="Remove trailing slash" stopProcessing="true">
  <match url="(.*)/$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Redirect" redirectType="Permanent" url="{R:1}" />
</rule>

(来源:http://blogs.iis.net/ruslany/archive/2009/04/08/10-url-rewriting-tips-and-tricks.aspx

根据Introducing IIS Express,作为ScottGu,IIS Express支持完整的Web服务器功能集 - 包括SSL, URL重写,媒体支持以及所有其他IIS 7.x模块。

我倾向于相信IIS Express附带的URL Rewrite模块可能是1.0版本,而不是2.0版本。所以我安装了URL Rewrite Module 2.0,但我仍然遇到同样的错误。

有没有人知道为什么会这样?如果重要,我的设置是Visual Studio 2010 SP1,IIS Express 7.5.1070,ASP.NET MVC 3。

1 个答案:

答案 0 :(得分:2)

问题在于我将<rule>置于错误的节点中; “删除尾部斜杠”规则应该放在<rules></rules>内,但我错误地将其放在<outboundRules></outboundRules>中(BTW是“删除ETag”规则所在的位置)。