2016-03-04 68 views
3

基於「UserFriendlyURL」自動規則,我有一組兩個IIS URL重寫規則。這兩條規則的要點是取前兩個querystring參數(類型和系列)並將它們轉換爲用戶友好的URL。 如果用戶與其上的搜索進行交互,該頁面可能會將您返回到此頁面,但會返回其他查詢字符串參數,例如「頁面」或「頁面大小」。因爲它們不是友好URL的一部分,但是如果存在這些項目,我希望頁面向下滾動到搜索對象(因爲它們不是友好URL的一部分,因爲它們不是友好URL的一部分,很明顯,用戶只是與它進行交互)。IIS URL重寫,URL中的條件更改

爲此,我認爲我想要做的就是在最後添加一個位置散列(#search)。而不是遍歷該網頁上的每個搜索字詞,並手動將「#搜索」添加到最後(其中許多實際上是onclick操作,我不想編輯每個JS方法以將其添加到生成的URL的末尾),只要捕獲任何查詢字符串參數(除了類型/系列)存在的事實就好了,如果是這樣的話,請在URL的末尾添加「#search」。

這是可行的,如果是這樣,如何?我知道在條件句正則表達式: http://www.regular-expressions.info/conditional.html

但我不認爲這些會在這種情況下工作(!我很高興是錯的)

<rewrite> 
    <rules> 
    <rule name="RedirectUserFriendlyURL1" stopProcessing="true"> 
     <match url="^(cn/)?/product-details$" /> 
     <conditions> 
     <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" /> 
     <add input="{QUERY_STRING}" pattern="^Type=([^=&amp;]+)&amp;Series=([^=&amp;]+)$" /> 
     </conditions> 
     <action type="Redirect" url="{R:1}/product-details/{C:1}/{C:2}" appendQueryString="false" /> 
    </rule> 
    <rule name="RewriteUserFriendlyURL1" stopProcessing="true"> 
     <match url="^(cn/)?/product-details/([^/]+)/([^/]+)$" /> 
     <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="{R:1}/product-details?Type={URLEncode:{R:2}}&amp;Series={URLEncode:{R:3}}" /> 
    </rule> 
    </rules> 
</rewrite> 

回答

2

所以,這個問題的答案,據我所知 - 像我描述的設置哈希是不可能的一個,但有兩個,我可以重定向^Type=([^=&amp;]+)&amp;Series=([^=&amp;]+)&amp;(.+)到一個不同的網址{R:1}/product-details/{C:1}/{C:2}?{C:3}#search。 AppendQueryString是假的,在這裏,因爲我已經有&amp;(.+) =>?{C:3}

然而捕捉其他查詢字符串,我還發現了一個替代的解決方案,這是隻使用JavaScript/JQuery的動畫,檢測適當的情況下(在這種情況下,檢查其他查詢字符串)在JavaScript中,然後讓JS滾動到適當的錨點。這避免了需要使用IIS重寫,並使用最小的JavaScript。