2009-07-10 42 views
8

我在Windows 7 RC上使用IIS 7.5。我使用IIS Url Rewrite模塊來重寫URL。具有URL重寫模塊的IIS 7.5在Postback上加倍QueryString Params

似乎一切正常,直到我通過單擊按鈕執行回發。然後,追加查詢字符串PARAMS我重寫URL,就像這樣:

重寫後的URL,因爲它出現在瀏覽器: http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike

沒有URL重寫URL是:

http://localhost/product.aspx?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike

當我點擊一個按鈕來執行回發時,URL更改爲:

http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike

而當URL重寫,所有的查詢字符串PARAMS增加一倍 - 所以,當我想這樣做是爲了獲得當前語言:

Request.QueryString["lang"] 

我回來的值是「恩,恩」。

其他人有這些問題嗎?

UPDATE:從程序Web.Config

重寫規則
<rule name="RedirectProductPageUrls" stopProcessing="true"> 
    <match url="^product\.aspx$" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_METHOD}" negate="true" pattern="^POST$" /> 
     <add input="{QUERY_STRING}" pattern="^lang=([^=&amp;]+)&amp;id=([^=&amp;]+)&amp;title=([^=&amp;]+)$" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}/products/{C:2}/{C:3}" appendQueryString="false" redirectType="Permanent" /> 
</rule> 
<rule name="RewriteProductPageUrls" stopProcessing="true"> 
    <match url="^([^/]+)/product/([^/]+)/([^/]+)/?$" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="product.aspx?lang={R:1}&amp;id={R:2}&amp;title={R:3}" /> 
</rule> 
+0

你可以發佈你的重寫規則嗎?只需發佈web.config中的任何內容: ... – 2009-07-21 20:10:35

+0

已更新,其中包含重寫規則和產品頁面的重定向規則。 – MartinHN 2009-07-24 10:53:27

回答

8

添加appendQueryString = 「false」 屬性來重寫規則的動作元素爲好。

希望這會有所幫助。

+0

工程就像一個魅力!現在我準備好了Windows 7 RTM。 – MartinHN 2009-07-27 19:55:41

0

這是IIS重寫模塊的安全功能。

我個人更喜歡ISAPI重寫,因爲它更好,更簡單的編寫規則,並有更多的功能。

在中等到高負載(超過100個連接到一個網站)中發現IIS重寫模塊管理應用程序池崩潰和產卵以及新進程。

+0

布魯斯,我剛剛刪除了UrlRewritting Dll,因爲它迫使我在經典模式下使用app_pool。我想到IIS 7的內置會更好,更優化。你有其他建議嗎?請讓我知道..我很擔心。 – aron 2011-05-27 02:43:37

11

我能夠加入

Form.Action = Request.RawUrl; 

到Page_Load事件來解決問題。我能夠離開appendQueryString =「TRUE」,到目前爲止它工作正常。