我使用UrlRewritingNet在一把umbraco做一些基本的URL重写产品和类别的URL。一切都是我的本地机器(Visual Studio的开发,网络服务器)上和我们内部开发服务器(窗口服务器2008 ISS 7,32位)的罚款。但它不能生产服务器,这是窗口服务器2008 R2与IIS 7(64位)上。该症状是重写规则不会被触发。服务器简单地给我一个404错误。

重写规则如下所示:

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

在URL看起来如下 - 这不工作:

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是在服务器上的版本相同。

有帮助吗?

解决方案

的问题是,在请求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,与从上一溶液有很简单。

其他提示

这是因为你的正则表达式也匹配“+”字符觉得奇怪,我。也许问题是因为在正则表达式的第一个字符,字符串“^”的开始,你正在使用。也许在生产服务器上你得到一个绝对的URL,你的开发环境服务器上的一个相对URL传递到重写模块。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top