使用UrlRewritingNet进行URL重写失败,并在URL中使用+ char

时间:2010-09-29 13:16:41

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

我在Umbraco中使用UrlRewritingNet对产品和类别URL进行基本的URL重写。我的本地计算机(Visual Studio dev-webserver)和我们的内部开发服务器(带有ISS 7,32位的Window Server 2008)上的一切都很好。但它在生产服务器上失败,这是带有IIS 7(64位)的Window Server 2008 R2。症状是不会触发重写规则。服务器只是给我一个404错误。

重写规则如下所示:

<add name="CategoryRewrite"
     virtualUrl="^/products/(.*)/(.*).aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/default.aspx?umbPage=1&amp;maincategory=$1&amp;subcategory=$2"
     ignoreCase="true"/>

网址如下所示 - 这不起作用:

http://example.net/products/category+name/sub+category.aspx

如果我将URL更改为以下内容,则它适用于所有3种环境:

http://example.net/products/category%20name/sub%20category.aspx

很明显,当+用于空格字符时,virtualUrl属性中的正则表达式失败。但我必须承认,我可以弄清楚为什么正则表达式只在Windows 2008 R2服务器上失败。

我正在寻找有关Windows Server 2008 R2与其他2个环境之间存在差异的见解。我应该寻找什么?

我已确认System.Web.RegularExpressions.dll与服务器上的版本相同。

2 个答案:

答案 0 :(得分:1)

问题是IIS7请求筛选器拒绝包含+字符的URL。解决方案是将以下内容添加到Web.config:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering allowDoubleEscaping="true" />
  </security>
 </system.webServer>
</configuration> 

有关详细信息:http://blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx

一位同事明智地想在他自己的IIS上运行该网站。然后将错误进一步定义为404.11,从那里解决方案很简单。

答案 1 :(得分:0)

这对我来说很奇怪,因为你的正则表达式也匹配'+'字符。也许问题是因为正则表达式中的第一个字符,您正在使用的字符串'^'的开头。也许在生产服务器上,您获得了一个绝对URL,并且在您的开发环境服务器上有一个相对URL传递到重写模块。