我重写了特定目录的工作,但无法弄清楚如何让search结果重写工作。
如果直接进入/blog/?s=coffee ,则会转到正确的search结果页面。 但是由于其他url重写,search结果页面正在尝试去/?s=coffee/ 。
dynamic的内容部分扔给我。 我已经尝试了很多东西,但是玩笑
<rule name="Redirect long query string" stopProcessing="true"> <match url="^?s=(.*)$" /> <action type="Rewrite" url="blog/?s=$1" appendQueryString="false" /> </rule>
我不知道我在做什么。 这是一个奇迹,我得到了其他重写工作。
我很抱歉成为一个给你带来坏消息的人,但是你的重写规则对你没有任何帮助。 <match>标记中的正则expression式无效。 首先查询string不是那里的URL的一部分,并匹配一个? 在正则expression式中,你必须使用\? 作为? 在正则expression式中有特殊的含义。
而且你重写的url的语法也是无效的。 您不能使用$1作为反向引用,但应该使用{R:x} (反向引用URL)或{C:x} (反向引用条件),其中x是常规部分的数字expression你想参考。
不幸的是,我不清楚你想要完成什么。 我的猜测是,您正在尝试将所有以查询string中的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>需要是查询string的第一个参数。
如果你想做其他的事情,请编辑你的问题,再举几个URL的例子,以及它们将如何被重写。
更新:如果您需要search表单使用site.com/blog/?s=而不是site.com/?s=为什么不简单地更改search表单的HTML? 只要改变这种forms的action 。
要使上述规则与WordPress重写规则一起工作,您必须稍微修改它。 首先,你必须删除stopProcessing="true" ,为了安全起见,修改<action>的url并添加一个前导斜杠。 可能不是确实必要的。
所以重写规则将变成:
<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规则应该是最后的规则。
通过在我的主题中使用自定义search表单,我发现了一个更简单的方法来完成相同的事情(至less暂时)。 我相信这个问题将会在未来的某个时候出现,但只要这是唯一的search网站的需求,它将起作用。 我想有一些方法可以允许多个search表单,就像你可以有多个类别的归档页面一样(比如searchform-[slug].php ),所以稍后会进行实验。
我仍然有兴趣知道如何通过IIS来完成这样的事情,>> 这个解决scheme <<解决了我的问题。