web-dev-qa-db-ja.com

.htaccessでプロキシを設定する方法

Apacheのドキュメントには、RewriteRuleとをサーバー構成に配置する必要があると記載されていますが、共有ホスティングの状況のた​​め、htaccessに配置することができます。私はそのような状況にいます。

透過プロキシを設定しようとしています:

 RewriteEngine On
 RewriteCond %{REQUEST_URI} ^/foo [OR]
 RewriteCond %{REQUEST_URI} ^/bar
 RewriteRule ^(.*)$ http://example.com/$1 [P]

これは正常に動作しています...リダイレクトを除いて(/foo/barにリダイレクトする場合など)。リダイレクトはサーバーではなくexample.comに戻ります。

ProxyPassReverseディレクティブがこれを解決することを理解していますが、これを.htaccessに追加すると、「内部サーバーエラー」ページが表示されます

Rewriteディレクティブとは異なり、 ProxyPassReverseはhtaccessでは機能しません

共有ホスティングの状況で透過プロキシを設定するにはどうすればよいですか?

(Rewriteはすでに80%の方法で到達しており、1つのhtaccessに透過プロキシがあっても、別のhtaccessに干渉することはないため、これは妥当なようです。)

14
Paul Draper

残念ながら、あなたがしたいことは不可能だとかなり確信しています。私はまったく同じことをしようとしています!私の研究から、それは不可能だとかなり確信しています。

簡単に言えば、VirtualHostレベル(または同様のもの)でのみ使用可能なProxyPassReverseを使用する必要があります。 htaccessレベルではありません。

編集:これを実現する唯一の方法は、プロキシの背後にあることを認識するように応答するサーバー/アプリケーションを構成し、ページを適切に提供することです。つまり、次のように.htaccessを使用して別のサーバーにリダイレクトします。

  RewriteEngine on
  RewriteRule  (.*)  http://localhost:8080/$1  [P,L] 

次に、アプリケーションサーバー(この場合はJIRAインストール)でJava Tomcat/Catalinaを適切に構成して、プロキシ情報を含むページを提供します。

 proxyName="my.public.address.com"
 proxyPort="80"

ただし、これは完全に透過的ではありません。アプリサーバーは、プロキシされた方法でページを提供する必要があります。しかし、それはいくつかの役に立つかもしれません。

17