1

私はApache 2.2を持っていて、mod_rewriteを使用しています。私の目的は、トラフィックを http://localhost:80/AAからhttp://localhost:8090/BBに転送することです。だから私は簡単なルールを持っています

RewriteRule http://localhost:80/AA http://localhost:8090/BB

私の問題は、クライアントが「302 Found」を受け取ることです。RewriteRule がトラフィックを AA から BB に転送し、最終的に BB がクライアントに応答を送信することを期待していました。

構成に問題はありますか?

4

3 に答える 3

1

RewriteRuleのドキュメントを参照してください

あなたがしたいことは、リダイレクトのためにルールに R フラグを追加することです。

RewriteRule http://localhost:80/AA http://localhost:8090/BB [R=permanent,L]

L最後のルール。

于 2010-11-07T15:14:38.473 に答える
0

RewriteRuleの左側、つまりパターンは、一致させたいファイル名である必要があります^/AA$。ホストとポートが特定の値と一致することも確認したい場合は、とに一致するようにRewriteCondを設定する必要が%{HTTP_HOST}あり%{SERVER_PORT}ます。ただし、Webサーバーが複数のドメインとポート用に構成されていない限り、後者は不要な場合があります。

これはテストされていませんが、次のようなものです。

RewriteCond %{HTTP_HOST}   ^localhost
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^/AA$          http://localhost:8090/BB

最初にこれだけを試すことをお勧めします:

RewriteRule ^/AA$          http://localhost:8090/BB

必要に応じてRewriteCondを追加します。

コメントに基づいて編集する:「302」応答を回避しようとしている場合、説明している状況ではそれを行うことはできません。mod_rewriteを使用して1つのホストから別のホストにリダイレクトすると、2つの応答がブラウザーに送信されます。1つ目は302で、これはブラウザに2番目のURLに移動するように指示します。2番目の応答は200である必要があります。

mod_rewriteを使用すると、同じサーバーとポートで1つのページから別のページにリライトする場合に、途中でリダイレクトを回避できます。その場合、リライトは内部で行われ、要求がAAに対するものであっても、WebサーバーはBBページで応答できます。別のサーバーまたはポートを使用する場合、AAのWebサーバーはページBBにアクセスできないため、アクセスできるサーバーへのリダイレクトで応答します。

AAとBBに同じポートを使用するようにサイトを再構成できる場合は、それを機能させることができます。そうでなければ、 mod_proxyでやりたいことができるかもしれないと思います。私はmod_proxyを使用したことがないので、何をする必要があるかわかりません。

于 2010-11-07T15:49:14.713 に答える
0

トラフィックを転送したい場合は、それmod_rewriteができないと思います。できれば次を使用する必要がありますmod_proxy: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypassreverse

ドキュメントの例:

ProxyRequests Off

<Proxy *>
   Order deny,allow
  Allow from all
</Proxy>

ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
于 2010-11-08T18:29:34.967 に答える