web-dev-qa-db-ja.com

Apacheのプロキシモジュールを使用してURLをリダイレクトするにはどうすればよいですか?

これは非常に基本的な質問のようですが、簡単な解決策を見つけるのに苦労しているので、これに関する私との助けと忍耐に感謝します:

特定のURLをリダイレクトするようにApacheプロキシサーバーを構成します。たとえば、www.olddomain.comのWebブラウザHTTPリクエストがプロキシサーバーに渡され、プロキシサーバーがリクエストをwww.newdomain.comにルーティングしてレスポンスを送信します。プロキシサーバーに送信され、Webサーバーに渡されます。

とてもシンプルに思えますが、Apacheでこれを実現する方法はわかりません。 Squid/Squirmがこの機能を提供していることを知っているので、本当に基本的な何かが欠けていると思います。 RewriteRuleを使用してURLを動的に変更し、それをプロキシサーバーに渡すことができることはわかっていますが、実際には逆を行いたいので、プロキシサーバーは元のURLを受信し、RewriteRuleを適用し、新しいHTTP要求を転送します。 URL。

それが理にかなっていると思います。助けてくれてありがとう。

7
LearningIT

以前の回答に対するコメントから、転送プロキシとしてApache(ProxyRequests On)を使用していることがわかります。 mod_rewriteを使用して、特定のURLのプロキシパスを実行できます。

あなたはおそらくあなたのApache設定でこのようなものを得ました:

ProxyRequests On
ProxyVia On
<Proxy *>
   Order deny,allow
   Allow from xx.xx.xx.xx
</Proxy>

次に、www.olddomain.com/fooからwww.newdomain.com/barへのすべてのリクエストをプロキシ通過させるために、次を追加する必要があります

RewriteEngine On
RewriteCond %{HTTP_Host} ^www\.olddomain\.com$
RewriteRule /foo(.*)$ http://www.newdomain.com/bar/$1 [P,L]

これは何ですか:

  • ホストにリクエストが行われたときwww.olddomain.com、RewriteRuleが起動します
  • このルールは、/ fooを http://www.newdomain.com/bar/ に置き換えます
  • 置換はmod_proxy(P)に渡されます
  • 書き換えを停止(L)

結果の例:

  • ブラウザは、Apacheをプロキシサーバーとして使用するように構成されています
  • Www.olddomain.com/foo/test.htmlをリクエストします
  • Apacheはこれをwww.newdomain.com/bar/test.htmlに書き換えます
  • 担当のWebサーバーにこのページを要求します
  • 結果をwww.olddomain.com/foo/test.htmlとしてブラウザに返します。
4
basvdlei

私があなたを正しく理解しているなら、あなたはおそらく以下を見たいと思います: mod_proxy 名前ベースの仮想ホストと組み合わせて

これがどのように見えるかの小さな例です。 www.olddomain.com仮想ホストからのすべてのリクエストは、www.newdomain.comからリクエストされ、Apacheによって書き換えられます。

NameVirtualHost *:80
<VirtualHost *:80>
     ServerName www.olddomain.com

     <Proxy *>
            Order deny,allow
            Allow from all
     </Proxy>
     ProxyPass / http://www.newdomain.com/
     ProxyPassReverse / http://www.newdomain.com/
     ProxyPassReverseCookieDomain www.newdomain.com www.olddomain.com 
</VirtualHost>
1
basvdlei