1

私の Web サイトでは、外部のシステムによって URL にクエリ文字列パラメータが追加されることがあります。

したがって、このように見える代わりに:http://www.domain.com?myquery=blahまたはhttp://www.domain.com、URLがありhttpます:http://www.domain.com?myquery=blah&theirpara=blahまたはhttp://www.domain.com?theirpara=blah.

ユーザーが「theirpara」パラメーターを使用してアクセスした場合、パラメーターなしで URL に 301 リダイレクトしたいと考えています。

URL 書き換えモジュールを使用してみましたが、実際にはどこにも行きません。可能であれば、Response.RedirectPermanent の代わりに IIS/web.config レベルで行うとよいでしょう。

ルール(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>

それを設定する方法についてのアイデアはありますか?

4

2 に答える 2

4

theirpara他のクエリ文字列パラメーターを削除して保持する非常に一般的なルールを探している場合は、次のようなケースを処理する必要があります。

  1. それは一人です:?theirpara=123- >/
  2. それは最初です:?theirpara=123&ourparams=456- >?ourparams=456
  3. それは真ん中にあります:?our1=123&theirpara=456&our2=789- >?our1=123&our2=789
  4. 最後です: ?ourparams=123&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>
于 2012-11-10T13:28:44.413 に答える
1

手元に IIS はありませんが、次のように動作するはずです。

一致を変更

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

にリダイレクトします

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

プレーン ドメインだけでなく動作させたい場合は、それに応じて条件を削除する必要があります。

于 2012-11-10T13:28:12.793 に答える