0

私は urlrewritefilter を飼いならそうとしていますが、リダイレクトのあるルールがフォワードの別のルールと一致する場合、アドレスバーにリダイレクトしている URL が期待どおりに表示されないようです。

構成のスニペットを次に示します。

<rule>
  <from>/patha</from>
  <to type="redirect">/pathb</to>
</rule>

<rule>
  <from>/pathb</from>
  <to type="forward">/pathc</to>
</rule>

アクセスしようとしているときに、このルールによって期待されることpatha

  • pathaブラウザを にリダイレクトするためのルールpathb、アドレス バーの URLが変更されます。
  • このルールは最後ではないので、 のルールpathbもよく一致するため、ブラウザは pathc に転送されますが、これは転送であるため、アドレスバーの URL はpathb のままです

しかし、実際に起こっていることは、アドレスバーを変更せずに pathc に転送していることです。

私の質問は次のとおりです。なぜそうなのか、どうすれば私が求めているものを実際に達成できるのでしょうか?

UPD: 次の方法でjspでリダイレクトを使用してurlrewritefilter forwardをテストしました:

response.setStatus(302);
response.setHeader("Location", "pathb");
response.setHeader("Connection", "close");

結果は同じで、URL は書き換えられません。

4

1 に答える 1

5

あなたが気づいているのは、期待される動作です。forwardブラウザに URL が表示されることはありません。以下の と の違いを参照forwardしてredirectください。

前方

  • 転送はサーブレットによって内部的に実行され、ブラウザはそれが行われたことをまったく認識しないため、元の URL
  • 結果のページをブラウザーがリロードすると、元の URL を使用して元の要求が単純に繰り返されます。

リダイレクト

  • リダイレクトは 2 段階のプロセスであり、Web アプリケーションがブラウザに 2 番目の URL を取得するように指示します。これは、元の URL とは異なります。2 番目の URL のブラウザのリロードは、元の要求を繰り返さず、2 番目の URL を取得します。
  • リダイレクトは転送よりもわずかに遅くなります。これは、2 つのブラウザー リクエストが必要であり、元のリクエスト スコープに配置されたオブジェクトが 2 番目のリクエストで使用できないわけではないためです。
于 2012-09-22T13:33:40.543 に答える