我是URL重写的新手,并尝试重写/重定向多个查询,但似乎无法正常工作。由于这是搜索结果并且具有不同的过滤,因此查询可能会有所不同。例如,某些搜索我们可能会查询t1=something
,而另一个搜索可能会t2=somethingelse
,有时我们可能会将它们合并为:t1=something&t2=somethingelse
我使用IIS7和web.config,这是我到目前为止所做的:
这是我的示例链接
www.website.com/search/?t1=first&t2=second
我尝试了以下内容,其中没有实际工作:
(1)
<rewrite>
<rules>
<rule name="first" stopProcessing="true">
<match url="search/" />
<conditions trackAllCaptures="true">
<add input="{QUERY_STRING}" pattern="t1=([0-9a-zA-Z]+)" />
</conditions>
<action type="Redirect" url="search/{C:1}/" appendQueryString="false" />
</rule>
<rule name="second" stopProcessing="true">
<match url="search/" />
<conditions trackAllCaptures="true">
<add input="{QUERY_STRING}" pattern="t2=([0-9a-zA-Z]+)" />
</conditions>
<action type="Redirect" url="search/{C:1}/" appendQueryString="false" />
</rule>
</rules>
</rewrite>
(2)
<rule name="a" stopProcessing="true">
<match url="search2/" />
<conditions trackAllCaptures="true">
<add input="{QUERY_STRING}" pattern="t1=([0-9a-zA-Z]+)" />
<add input="{QUERY_STRING}" pattern="t2=([0-9a-zA-Z]+)" />
</conditions>
<action type="Redirect" url="search2/{C:1}/{C:2}" appendQueryString="false" />
</rule>
我真的很感激任何帮助。
感谢。
答案 0 :(得分:0)
我以为我会分享我找到的链接 -
此外,要分隔多个参数,您可以使用管道运算符。例如,像这样:
PARM1 =(\ W +)| = parm2(\ W +)
使用{C:1}和{C:2}
应用目标网址所以,URL就像这样:
yourapp / list.aspx PARM1 = ABC&安培; parm2 = 123
将导致后面的引用如下 - {C:1} = abc和{C:2} = 123
答案 1 :(得分:0)
此外,这篇文章可能会提供答案 -
Tracking Capture Groups Across Conditions setting
编辑:上面链接中的示例
请注意 trackAllCaptures = true
<rule name="Back-references with trackAllCaptures set to true">
<match url="^article\.aspx" >
<conditions trackAllCaptures="true">
<add input="{QUERY_STRING}" pattern="p1=([0-9]+)" />
<add input="{QUERY_STRING}" pattern="p2=([a-z]+)" />
</conditions>
<action type="Rewrite" url="article.aspx/{C:1}/{C:2}" /> <!-- rewrite action uses back-references to both conditions -->
</rule>