【问题标题】:URL rewriting with UrlRewritingNet fails with a + char in the URL使用 UrlRewritingNet 重写 URL 失败,URL 中带有 + 字符
【发布时间】:2011-04-18 19:51:52
【问题描述】:

我在 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"/>

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

【问题讨论】:

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


    【解决方案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,从那里开始解决方案很简单。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 确实很奇怪。关于绝对 URL 的好理论,但我将不得不将其击落。正则表达式也适用于生产服务器,只是 URL 中没有 + 字符。似乎它从未被路由到 UrlRewritingNet。
      猜你喜欢
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2015-09-14
      • 2017-04-24
      相关资源
      最近更新 更多