【问题标题】:IIS URL redirect to same page with different query stringIIS URL 重定向到具有不同查询字符串的同一页面
【发布时间】:2017-06-21 04:06:09
【问题描述】:

我有一段 JavaScript 代码,当用户在没有查询字符串的情况下访问 mypage 时,我会重定向到具有特定查询字符串的同一页面。

我认为最好使用 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,以防万一。但在这两种情况下都不起作用。

另外,我尝试了“重写”和“重定向”两种操作类型,以防万一。没用。

你能帮忙吗?谢谢。

【问题讨论】:

  • 我想在 URL 中看到新的查询字符串,所以首选“重定向”操作类型。

标签: iis url-rewriting web-config


【解决方案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>

【讨论】:

  • 谢谢杰罗恩。第一个斜杠是必需的。您的正则表达式可以匹配“www.mysite.com/this-is-mypage”,这在我的情况下是不需要的。您能否更具体地说明答案的第二部分?如何“检查已经存在的查询字符串”?
  • 如果您想避免匹配“www.mysite.com/this-is-mypage”,那么您需要使用 ^ 以便它在 URL 的开头开始匹配。您可以将查询字符串添加为条件并将其取反,以便它匹配除查询字符串之外的所有内容,以避免重定向循环。我用完整的规则更新了我的原始答案。
猜你喜欢
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
相关资源
最近更新 更多