2010-09-29 26 views
1

我在Umbraco中使用UrlRewritingNet對產品和類別URL進行一些基本的URL重寫。我的本地機器(Visual Studio dev-webserver)和我們的內部開發服務器(帶有ISS 7,32位的Window Server 2008)都可以正常工作。但它在生產服務器上失敗,該服務器是具有IIS 7(64位)的Window Server 2008 R2。症狀是重寫規則未被觸發。服務器只是給我一個404錯誤。使用UrlRewritingNet進行URL重寫失敗,並在URL中輸入+ char

重寫規則是這樣的:

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

回答

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,並且從那裏解決方案很簡單。

0

這對我來說似乎很陌生,因爲你的正則表達式匹配'+'字符。也許這個問題是由於正則表達式中的第一個字符,因爲你使用的字符串'^'開頭。也許在生產服務器上你得到一個絕對的URL,在你的開發環境服務器上有一個相對URL被傳遞到重寫模塊中。

+0

確實很奇怪。關於絕對URL的很好的理論,但我將不得不把它擊倒。正則表達式也可以在生產服務器上使用,而不是在URL中使用+字符。它似乎從來沒有路由到UrlRewritingNet。 – 2010-09-30 05:52:51