通过web.config删除查询字符串

时间:2012-11-10 12:46:12

标签: c# asp.net iis web-config url-rewrite-module

在我的网站上,我遇到的情况是我的网址有时会被我们的系统外部附加一个查询字符串参数。

所以它不是这样的:http://www.domain.com?myquery=blahhttp://www.domain.com,而是有网址httphttp://www.domain.com?myquery=blah&theirpara=blahhttp://www.domain.com?theirpara=blah

当用户使用“hispara”参数访问时,我想在没有它的情况下将301重定向到URL。

我已经尝试过使用URL重写模块,但实际上并没有到达任何地方。如果可能的话,在IIS / web.config级别而不是Response.RedirectPermanent这样做会很好。

我认为使用规则(URL写入模块)进行设置会很好,但说实话,我不知道如何解决这个问题。我使用以下规则来删除尾部斜杠,但不确定如何将其修改为此需要。

<!--To always remove trailing slash from the URL-->
<rule name="Remove trailing slash" stopProcessing="true">
  <match url="(.*)/$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Redirect" redirectType="Permanent" url="{R:1}" />
</rule>

有关如何设置的任何想法?

2 个答案:

答案 0 :(得分:4)

如果您正在寻找一个非常通用的规则,删除theirpara但保留任何其他查询字符串参数,那么您将不得不处理

的情况
  1. 一个人:?theirpara=123 - &gt; /
  2. 首先:?theirpara=123&ourparams=456 - &gt; ?ourparams=456
  3. 位于中间:?our1=123&theirpara=456&our2=789 - &gt; ?our1=123&our2=789
  4. 最后:?ourparams=123&theirpara=456 - &gt; ?ourparams=123
  5. 我写了一条处理这些案件的规则但是在案例4中留下了一个尾随的&符号,我希望它足以让你开始。

    <rule name="Redirect on theirpara" stopProcessing="true">
        <match url="^(.*)$" />
            <conditions>
                <add input="{QUERY_STRING}" pattern="^(.*)theirpara=([^=&amp;]+)&amp;?(.*)$" />
            </conditions>
        <action type="Redirect" url="/{R:0}?{C:1}{C:3}" appendQueryString="false" />
    </rule>
    

答案 1 :(得分:1)

我手边没有IIS,但以下内容应该有效:

将匹配更改为

<match url="(.*)&theirpara=blah(.*)" />

并重定向到

<action type="Redirect" redirectType="Permanent" url="{R:1}{R:2}" />

如果您希望它不仅在普通域上工作,您应该相应地删除条件。