Iis

iis 7 url 重寫搜尋結果

  • November 27, 2012

我已經為特定目錄進行了重寫,但無法弄清楚如何讓搜尋結果重寫工作。

如果直接轉到/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 完成這樣的事情,>>這個解決方案<< 解決了我的問題。

我很抱歉成為那個給你帶來壞消息的人,但你的重寫規則對你沒有任何幫助。標籤中的正則表達式&lt;match&gt;無效。首先,查詢字元串不是 URL 的一部分,要匹配?正則表達式中的 a,您必須使用\?它,因為?在正則表達式中具有特殊含義。

而且你重寫的語法url也是無效的。您不能$1用於反向引用,但應該使用{R:x}(對於 URL 的反向引用) 或{C:x}(對於條件的反向引用) wherex是您要引用的正則表達式部分的編號。

不幸的是,我並不清楚您要完成什麼。我的猜測是您正在嘗試將s=&lt;something&gt;查詢字元串中以/blog/?s=&lt;something&gt;. 如果是這種情況,那麼這條規則應該這樣做:

&lt;rule name="Rewrite search queries" stopProcessing="true"&gt;
   &lt;match url=".*" /&gt;
   &lt;conditions&gt;
       &lt;add input="{QUERY_STRING}" pattern="^s=([^&amp;.]*)&amp;?" /&gt;
   &lt;/conditions&gt;
   &lt;action type="Rewrite" url="blog/?s={C:1}" appendQueryString="false" /&gt;
&lt;/rule&gt;

為簡單起見,s=&lt;something&gt;需要作為查詢字元串的第一個參數。

如果您想做其他事情,請編輯您的問題並提供更多 URL 範例以及如何重寫它們。

**更新:**如果您需要使用搜尋表單site.com/blog/?s=site.com/?s=不是簡單地更改搜尋表單的 HTML?只需更改該action表單的。

要使上述規則與 WordPress 重寫規則一起使用,您必須對其稍作修改。首先,您必須刪除stopProcessing="true"並確保安全,修改 theurl&lt;action&gt;添加前導斜杠。可能不是真的有必要,只是為了確定。

所以重寫規則將變為:

&lt;rule name="Rewrite search queries"&gt;
   &lt;match url=".*" /&gt;
   &lt;conditions&gt;
       &lt;add input="{QUERY_STRING}" pattern="^s=([^&amp;.]*)&amp;?" /&gt;
   &lt;/conditions&gt;
   &lt;action type="Rewrite" url="/blog/?s={C:1}" appendQueryString="false" /&gt;
&lt;/rule&gt;

並確保此規則高於 WordPress 重寫規則。WordPress 規則應該是最後的規則。

引用自:https://serverfault.com/questions/450699