1

SEO URL 変換と 301 リダイレクトを処理するために、BeginRequest にアタッチされた httpModule を作成しました。ほとんどのことは URL 書き換えで実行できますが、より柔軟なオプションが必要でした。また、URL 書き換えは変換ごとに複数のリダイレクトを発行します (「www」を追加することはリダイレクトであり、小文字の URL に切り替えることも別の方法であり、末尾に「」を追加します)。 /" 別のものなど...) 一方、私の httpModule はすべての条件 (ページが安全である必要があるかどうかの http/https を含む) をチェックし、URL を変換してから、単一の 301 リダイレクトを実行します。

私が直面している問題はこれです... IIS 7.5 は、http://www.example.com/mydir/ への要求に応じて、これを内部的にhttp://www.example.com/mydir/defaultに変換するようです。 aspxとこれにより、「default.aspx」部分を削除して永久にhttp://www.example.com/mydir/にリダイレクトしようとするモジュールで無限ループがトリガーされます

私のモジュールの BeginRequest で何が起こるかは非常に単純です。リクエストごとに関数 CheckRedirects() を呼び出します。この関数はすべてのルールをチェックし、リダイレクトが必要ない場合は null 文字列を返し、実行するリダイレクトがある場合はサニタイズされた URL を返します。

http://www.example.com/mydir/にアクセスしたときにネットワークで何が起こるかを確認すると、実際には実際のリダイレクトではありません。 http://www.example.com/mydir/default.aspxへのリダイレクトなので、一種の「内部」リダイレクトですが、モジュールが台無しになり、無限ループが作成されます

現在のリクエストURLにアクセスします

Dim request As HttpRequest = HttpContext.Current.Request
Dim url As System.Uri = request.Url

EDIT:補足として、URL Rewrite 2.0モジュールを使用して同じリダイレクトを行うと、無限ループはトリガーされません。これは、内部の「default.aspx」モジュールが実行される前に、IIS モジュール チェーンで URL Rewrite 2.0 モジュールが起動していると思わせます。URL 書き換えのルールは次のとおりです。

<system.webServer>
    <rewrite>
      <rules>
        <rule name="Default Document" stopProcessing="true">
          <match url="(.*)default.aspx" />
          <action type="Redirect" url="{R:1}" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
</system.webServer>

問題は、URL 書き換えとカスタム HttpModule を混在させると、複数のリダイレクトが同じになってしまうことです...単純なシナリオhttp://example.com/defaultp.aspxを考えてみてください。 「default.aspx」を削除するURL書き換えモジュールから、次に「www」を追加するカスタムHttpModuleから別のものを削除します。

4

0 に答える 0