web-dev-qa-db-ja.com

IIS-1つの仮想ディレクトリに対するすべてのリクエストを別のHTTPディレクトリにHTTPリダイレクトします

ホスト名または完全なURLがわからず、URL書き換えモジュールを使用できない場合、仮想ディレクトリのすべての要求を別の仮想ディレクトリにリダイレクトするHTTPリダイレクトルールを設定するにはどうすればよいですか?

次のリダイレクトが機能するはずです。

http://Host1/app/oldvdir -> http://Host1/app/newvdir
http://Host1/app/oldvdir/ -> http://Host1/app/newvdir/
http://Host1/app/oldvdir/login.aspx -> http://Host1/app/newvdir/login.aspx
http://Host2/app/oldvdir/login.aspx -> http://Host2/app/newvdir/login.aspx

アプリのルートweb.configにリダイレクトルールを配置したいと思います。私は次のルールを試しましたが、最終的な結果は、リダイレクトされたvdirが元のvdirの最後に複製され、最大URL長に達するまでです、たとえば、

http://Host/oldvdir/login.aspx -> http://Host/oldvdir/newvdir/newvdir/newvdir/...

ルートweb.configのルール(先頭と末尾のスラッシュなどの有無にかかわらず、あらゆる種類の設定の組み合わせを試しました):

<location path="oldvdir">
    <system.webServer>
      <httpRedirect enabled="true" exactDestination="false" httpResponseStatus="Permanent">
        <add wildcard="*/oldvdir/*" destination="/newvdir/"/>
      </httpRedirect>
    </system.webServer>
  </location>

<location path="oldvdir/">
    <system.webServer>
      <httpRedirect enabled="true" exactDestination="false" destination="/newvdir" httpResponseStatus="Permanent"/>
    </system.webServer>
  </location>
2
nekno

できることはほとんどありません。

  1. 仮想ディレクトリを削除します。リクエストもリダイレクトするフォルダーを選択し、それを古い名前の仮想ディレクトリとして追加します。したがって、OldVdirを削除し、OldVDIRとして再度作成しますが、今回はソースを新しいvdirとして作成します。

  2. .asp .aspxを使用してリダイレクトを行うことができます。 ASPでは、あなたが怠けている場合はresponse.redirectを行うことができます、または次のように適切に行うことができます:

https://Gist.github.com/4153268

1
Frank

MSのドキュメントがこの主題に関して非常に欠けているのは残念です。幸いなことに、私はこれを理解することができました。 IIS6.0 documentation に記載されている$ Sと$ Qの用語を見つけました。

<configuration>
  <location path="app/oldvdir">
    <system.webServer>
      <httpRedirect enabled="true" destination="/app/newvdir$S$Q" exactDestination="true"/>
    </system.webServer>
  </location>
</configuration>
1
Mike Godin