代码之家  ›  专栏  ›  技术社区  ›  Emil Rasmussen

使用urlrewritingnet重写url失败,url中有一个+字符

  •  1
  • Emil Rasmussen  · 技术社区  · 15 年前

    我正在使用Umbraco中的urlrewritingnet对产品和类别URL进行一些基本的URL重写。在我的本地计算机(Visual Studio Dev Web服务器)和我们的内部开发服务器(带有ISS 7、32位的Windows Server 2008)上,一切都很好。但它在生产服务器上失败,该服务器是WindowsServer2008r2,带有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属性中的regex失败。但我必须承认,我可以弄清楚为什么regex只在Windows2008r2服务器上失败。

    我想了解一下Windows Server 2008 R2和其他2个环境之间的区别。我该找什么?

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Emil Rasmussen    15 年前

    问题是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,从这里开始,解决方案很简单。

        2
  •  0
  •   Bernd    15 年前

    我觉得这很奇怪,因为您的regex也匹配“+”字符。可能问题是因为regex中的第一个字符,即您正在使用的字符串'^'的开头。也许在生产服务器上,您得到了一个绝对的URL,而在开发环境服务器上,一个相对的URL被传递到重写模块中。

    推荐文章