2013-10-03 92 views
3

我認爲這很簡單,但它拒絕工作。舊的URL是IIS URL重寫不能與查詢字符串一起使用

http://www.site.com/?q=node/17

它需要重定向到http://www.site.com。我不需要擔心通配符,這是我唯一需要擔心的查詢字符串參數。我寫的規則看起來像

<rule name="Node17" patternSyntax="ExactMatch" stopProcessing="true"> 
    <match url="http://www.site.com/?q=node/17" /> 
    <action type="Redirect" url="http://www.site.com" appendQueryString="False" /> 
</rule> 

我可以測試IIS的內部格局和它匹配,但是當我打的網址在瀏覽器中它不會重定向。有什麼想法嗎?

回答

5

當然,我發佈後很快就明白了。這樣做,並不確定爲什麼精確匹配不起作用。

<rule name="Node17" stopProcessing="true"> 
    <match url=".*" /> 
<conditions> 
    <add input="{QUERY_STRING}" pattern="q=node/17" /> 
</conditions> 
<action type="Redirect" url="http://www.site.com" appendQueryString="False" /> 
</rule> 
4

Microsoft's documentation描述:

瞭解如何URL字符串的某些部分可以 從重寫規則進行訪問是很重要的。

有關本形式的HTTP URL: HTTP(S):// {主機}:{端口}/{路徑} {查詢字符串}

的{路徑}抵靠的圖案匹配規則。 {querystring}在名爲QUERY_STRING 的服務器變量中可用,並且可以通過使用規則中的條件進行訪問。

規則條件允許爲規則評估定義額外的邏輯... 規則條件在規則模式匹配成功後被評估。

在URL你想改寫爲重定向功能,您{host} = "www.site.com"{path} = ""{querystring} = "q=node/17"。因此,您想要重定向的網址中的{path}部分實際上是空的,並且您在問題中使用的規則與它匹配並且不匹配。

您的解決方案確實是有效的,所以在這裏我要引用它:

<rule name="Node17" stopProcessing="true"> 
    <match url=".*" /> 
<conditions> 
    <add input="{QUERY_STRING}" pattern="q=node/17" /> 
</conditions> 
<action type="Redirect" url="http://www.example.com" appendQueryString="False" /> 
</rule> 
+0

幫我too..thank你這麼多 – Blossom