2015-06-30 33 views
1

我有以下重寫規則設置IIS 7重寫規則 - 重寫同一個頁面,一個或多個查詢字符串參數

<rule name="Department Rewrite" stopProcessing="true"> 
    <match url="^products/([^$]+)" /> 
    <action type="Rewrite" url="products?durl={R:1}" /> 
</rule> 
<rule name="Product Rewrite" stopProcessing="true"> 
    <match url="^products/([^$]+)/([^$]+)" /> 
    <action type="Rewrite" url="products?durl={R:1}&amp;purl={R:2}" /> 
</rule> 

部重寫按預期工作,現在我嘗試配置的產品要重寫工作。

隨着URL 產品/部門

  • 的Request.QueryString [ 「DURL」]輸出部門

隨着URL 產品/部門/產品

  • 的Request.QueryString [ 「DURL」]輸出部/產品
  • 的Request.QueryString [ 「金銀絲」]爲NULL

我如何去獲得產品重寫按預期方式工作?

UPDATE

還在尋找如何忽略URL重寫是否含有action/edit。例如

products/department/action/edit 
products/department/product/action/edit 

假設我需要應用一些條件語句,但不確定如何編寫它們。

回答

1

[^$]想要做什麼? 在部門重寫中,第一組是說「匹配除$之外的任何內容」,這是url的其餘部分,因此應用了規則,並且全部都是在durl中。

試試這些,它們說「除了斜線外什麼都不匹配」。如果您知道這是完整的網址(它仍然可以有查詢字符串參數),我還想放一個$來結束它。這將使產品跳過部門規則。

在部門規則:

<match url="^products/([^/]+)$" /> 

在產品的規則:

<match url="^products/([^/]+)/([^/]+)$" /> 

我喜歡的一致性,這兩個羣體是相同的,但你可以做第二個拿任何東西,更簡單規則:

<match url="^products/([^/]+)/(.+)" /> 

一個方面的建議:把更具體的規則第一,所以如果你只發送一個級別(部門),它絕對不符合產品規則。現在,部門抓住了產品規則。如果它們被顛倒過來,即使沒有更新規則,它也可能起作用。

+0

你的建議已經完成了。任何想法如何我可以否定如果URL包含「/動作/編輯」? –

+0

什麼是你想要避免的整個網址? – goodeye