2017-02-03 71 views
0

我有一段JavaScript代码,当用户转到mypage而没有查询字符串时,我重定向到具有特定查询字符串的同一页面。IIS URL重定向到具有不同查询字符串的同一页面

我认为这是更好地与一个IIS URL重写规则要做到这一点,是这样的:

<rules> 
    <rule name="mypage" stopProcessing="true"> 
    <match url="/mypage/*$" />  
    <action type="Redirect" url="/mypage/?category=shopping" appendQueryString="true" /> 
    </rule> 
</rules> 

它只是不工作。

我用IIS工具测试了正则表达式,它很好,重写规则也是由IIS选取的,因此在那里应该没有问题。我将appendQueryString设置为true和false,以防万一。但在两种情况下都不起作用。为了以防万一,我尝试了“重写”和“重定向”两种操作类型。没有工作。

你能帮忙吗?谢谢。

+0

我希望在URL中看到新的查询字符串,因此“重定向”操作类型是首选。 –

回答

1

您需要删除匹配网址中的第一个斜杠。你还需要检查查询字符串已经在那里,否则它将进入无限重定向循环。如果您重写,则不会出现此问题

<rule name="mypage" stopProcessing="true"> 
     <match url="^mypage/*$" /> 
     <action type="Redirect" url="/mypage/?category=shopping" appendQueryString="true" /> 
     <conditions> 
     <add input="{QUERY_STRING}" pattern="category=shopping" negate="true" /> 
     </conditions> 
    </rule> 
+0

谢谢Jeroen。第一个斜杠是必需的。你的正则表达式可以匹配“www.mysite.com/this-is-mypage”,这在我的情况下是不希望的。你能对你答案的第二部分更具体吗?我如何“检查查询字符串已经在那里”? –

+0

如果您想避免匹配“www.mysite.com/this-is-mypage”,那么您需要使用^,以便它在URL的开始处开始匹配。你可以添加查询字符串作为条件并取消它,以便匹配查询字符串以避免重定向循环。我用完整的规则更新了我的原始答案。 – Jeroen

+0

谢谢Jeroen! ;-) –

相关问题