【问题标题】:Remove querystring through web.config通过 web.config 删除查询字符串
【发布时间】:2012-11-10 12:46:11
【问题描述】:

在我的网站上,我的 URL 有时会得到一个查询字符串参数,该参数由我们的外部系统附加。

因此,它的 URL 不是像这样:http://www.domain.com?myquery=blahhttp://www.domain.com,而是具有 URL httphttp://www.domain.com?myquery=blah&theirpara=blahhttp://www.domain.com?theirpara=blah

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

我尝试使用 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>

关于如何设置它的任何想法?

【问题讨论】:

  • 他们的参数有什么问题,要删除吗?
  • Uriil:搜索引擎优化目的 :) 它在 Google 中被编入索引,给了我重复的内容。它可以用规范的网址修复,但我想要两种解决方案

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


【解决方案1】:

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

  1. 孤独:?theirpara=123 -> /
  2. 第一个:?theirpara=123&amp;ourparams=456 -> ?ourparams=456
  3. 在中间:?our1=123&amp;theirpara=456&amp;our2=789 -> ?our1=123&amp;our2=789
  4. 最后:?ourparams=123&amp;theirpara=456 -> ?ourparams=123

我写了一个规则来处理这些情况,但是如果 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>

【讨论】:

  • 我已经尝试了你的规则,但它对我不起作用。当我尝试测试模式时,它显示错误。 prntscr.com/nf4wil
  • @KalpeshBoghara。我认为你不应该使用 &在那个对话框中。只需使用 & 就足够了。
  • 我的模式是 ^(.*)theirpara=([^=&]+)&?(.*)$ 但网站包含 ?最后是 &。例如:example.com? example.com?otherparam=valueofother&
  • 如果 theirpara 不在 URL 中会发生什么。在我的情况下抛出一个错误,没有 theirpara 就无法访问网站 url
【解决方案2】:

我手头没有 IIS,但以下应该可以工作:

将匹配更改为

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

并重定向到

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2015-11-28
    相关资源
    最近更新 更多