iis 7 搜索结果 URL 重写

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>

我不知道自己在做什么。其他重写工作顺利完成真是个奇迹。

答案1

很抱歉给您带来坏消息,但您的重写规则对您没有任何帮助。<match>标签中的正则表达式无效。首先,查询字符串不是 URL 的一部分,并且要匹配?正则表达式中的,您必须使用,\?因为?在正则表达式中具有特殊含义。

而且,您重写的语法url无效。您不能使用$1反向引用,而应该使用{R:x}(反向引用 URL)或{C:x}(反向引用条件),其中x是您要引用的正则表达式部分的编号。

不幸的是,我不太清楚您想要实现什么。我猜您试图将s=<something>查询字符串中以 开头的所有请求重写为/blog/?s=<something>。如果是这样,那么此规则应该这样做:

<rule name="Rewrite search queries" stopProcessing="true">
    <match url=".*" />
    <conditions>
        <add input="{QUERY_STRING}" pattern="^s=([^&amp;.]*)&amp;?" />
    </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"并为了安全起见,修改url<action>添加前导斜杠。可能不是真的必要,只是为了确保万无一失。

因此重写规则将变成:

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

并确保此规则位于 WordPress 重写规则之上。WordPress 规则应该是最后的规则。

答案2

我发现了另一种更简单的方法(至少目前如此)来实现同样的效果在我的主题中使用自定义搜索表单。我确信这个问题将来会出现,但只要这是网站所需的唯一搜索,它就会起作用。我想有某种方法可以允许多个搜索表单,就像您可以拥有多个类别存档页面(如searchform-[slug].php)一样,所以稍后会尝试一下。

我仍然有兴趣了解如何通过 IIS 实现这样的事情,>>此解决方案<<解决了我的问题。

相关内容