iis 7 url 重寫搜尋結果
我已經為特定目錄進行了重寫,但無法弄清楚如何讓搜尋結果重寫工作。
如果直接轉到
/blog/?s=coffee
,則會轉到正確的搜尋結果頁面。但是由於其他 url 重寫,搜尋結果頁面正在嘗試轉到/?s=coffee/
.動態內容部分讓我大吃一驚。我嘗試了很多東西,但遲到了
<rule name="Redirect long query string" stopProcessing="true"> <match url="^?s=(.*)$" /> <action type="Rewrite" url="blog/?s=$1" appendQueryString="false" /> </rule>
我不知道我在做什麼。我得到其他重寫工作是一個奇蹟。
通過在我的主題中使用自定義搜尋表單,我發現了一種更簡單的方法來完成相同的事情(至少目前是這樣)。我相信這個問題會在未來的某個時候出現,但只要這是對網站需求的唯一搜尋,它就可以工作。我想有一些方法可以允許多個搜尋表單,就像您可以擁有多個類別存檔頁面(如
searchform-[slug].php
)一樣,稍後將對此進行試驗。我仍然很想知道如何通過 IIS 完成這樣的事情,>>這個解決方案<< 解決了我的問題。
我很抱歉成為那個給你帶來壞消息的人,但你的重寫規則對你沒有任何幫助。標籤中的正則表達式
<match>
無效。首先,查詢字元串不是 URL 的一部分,要匹配?
正則表達式中的 a,您必須使用\?
它,因為?
在正則表達式中具有特殊含義。而且你重寫的語法
url
也是無效的。您不能$1
用於反向引用,但應該使用{R:x}
(對於 URL 的反向引用) 或{C:x}
(對於條件的反向引用) wherex
是您要引用的正則表達式部分的編號。不幸的是,我並不清楚您要完成什麼。我的猜測是您正在嘗試將
s=<something>
查詢字元串中以/blog/?s=<something>
. 如果是這種情況,那麼這條規則應該這樣做:<rule name="Rewrite search queries" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{QUERY_STRING}" pattern="^s=([^&.]*)&?" /> </conditions> <action type="Rewrite" url="blog/?s={C:1}" appendQueryString="false" /> </rule>
為簡單起見,
s=<something>
需要作為查詢字元串的第一個參數。如果您想做其他事情,請編輯您的問題並提供更多 URL 範例以及如何重寫它們。
**更新:**如果您需要使用搜尋表單
site.com/blog/?s=
而site.com/?s=
不是簡單地更改搜尋表單的 HTML?只需更改該action
表單的。要使上述規則與 WordPress 重寫規則一起使用,您必須對其稍作修改。首先,您必須刪除
stopProcessing="true"
並確保安全,修改 theurl
並<action>
添加前導斜杠。可能不是真的有必要,只是為了確定。所以重寫規則將變為:
<rule name="Rewrite search queries"> <match url=".*" /> <conditions> <add input="{QUERY_STRING}" pattern="^s=([^&.]*)&?" /> </conditions> <action type="Rewrite" url="/blog/?s={C:1}" appendQueryString="false" /> </rule>
並確保此規則高於 WordPress 重寫規則。WordPress 規則應該是最後的規則。