IIS重写规则检查查询字符串,如果不存在则添加它

时间:2012-09-28 22:42:15

标签: regex iis-7 url-rewriting isapi-rewrite url-rewrite-module

我正在尝试制作一个IIS URL重写规则,将URL参数附加到URL。 url参数为hssc。因此,通过服务器处理的任何URL都需要该参数。请记住,一些网址已经拥有自己的参数,其他网址不会,根网址等,有时需要添加?hssc=1&hssc= - 所以,如果我有这样的URL:

我还希望不要隐藏URL(如在后台重写幕后)。我需要在URL中显示URL,因此当用户复制URL或将其加入书签时,参数就在那里。

我已将条件设置为与\&hssc|\?hssc匹配 - 现在我只需要一种方法来编写URL,因此它会显示并保留已存在的原始URL的一部分。

2 个答案:

答案 0 :(得分:4)

想出来 - 规则将如下设置:

<rewrite>
            <rules>
                <rule name="sigh" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url="(.*)" negate="false" />
                    <action type="Redirect" url="{PATH_INFO}?hssc=1" />
                    <conditions>
                        <add input="{QUERY_STRING}" pattern="^hssc=|\?hssc=|\&amp;hssc=" negate="true" />
                    </conditions>
                </rule>
            </rules>
        </rewrite>

答案 1 :(得分:0)

只是通过代码维护QS的提示:

public static string GetQS()
{
  var sb = new System.Text.StringBuilder();

  System.Collections.Specialized.NameValueCollection Qs = HttpContext.Current.Request.QueryString;

  var lst = new List<string>(Qs.AllKeys);

  foreach (string s in lst)
  {
    if (s == "MyOwnQSKey")
      sb.Append(s + "=" + "MyValue" + "&");
    else
      sb.Append(s + "=" + Qs[s] + "&");
  }

  if (!lst.Contains("MyOwnQSKey"))
    sb.Append("MyOwnQSKey=MyValue&");

  if (sb.ToString().EndsWith("&"))
    sb.Remove(sb.Length - 1, 1);

  return "?" + sb;
}

我刚从Url-Rewrite和QS中的一个类似于你的项目中复制了这个

希望这个帮助