0

次のシナリオがあります。

  • いくつかの webapp が実行されているリモート サーバーhttp://remote/webapp
  • 企業ネットワーク内のローカル マシン
  • それらの間の企業プロキシ
  • ローカル マシンで実行されている mod_rewrite を使用した Apache

mod_proxy にすべてのリクエストを のようhttp://localhost/webapp?someparamsに書き換えてもらいたいhttp://remote/webapp?someparamsです。

現在、次の httpd.conf があります。

DocumentRoot "C:/Apache2.2/htdocs"

<Directory />
    RewriteEngine On
    RewriteRule ^(.+) http://remote/$1 
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
</Directory>

その結果、 mod_rewrite は次のように変換http://localhost/webapp?someparamsされますhttp://remote/C:/Apache2.2/htdocs/webapp?someparams

それを正しく処理するように mod_rewrite を構成するにはどうすればよいですか?

4

2 に答える 2

0

インスピレーションをくれたジョンに感謝します。最終的に mod_proxy + mod_rewrite が機能しました:

# Global context
RewriteEngine On
RewriteRule ^(.+) http://remote/$1 [P]
ProxyPassReverse / http://remote/

これは単純化された大雑把な解決策であることはわかっていますが、私の目的には合っています。

于 2012-10-30T09:30:44.377 に答える
0

vhost/server 構成にアクセスできるように見えるので、mod_rewrite を捨てて、mod_proxy だけを使用する必要があります。

ProxyPass /webapp http://remote/webapp
ProxyPassReverse /webapp http://remote/webapp

mod_rewrite の 2 行 (プロキシではなくリダイレ​​クト) を削除します。

RewriteEngine On
RewriteRule ^(.+) http://remote/$1 

Cookie がある場合は、 ProxyPassReverseCookieDomain を使用してドメインを逆マップする必要がある場合があることに注意してください


また:

Windows の絶対パスが URL に表示されるという事実は、mod_rewrite の設定ミスによるものであり、これは私が回避しようとしているものです。

これは mod_rewrite の設定ミスではありません。書き換えルールを 内に配置する<Directory>と、URI パスの代わりにファイルパスが一致に使用されます。mod_rewrite ドキュメントによると

何が一致していますか?

コンテキストではVirtualHost、パターンは最初に、ホスト名とポートの後、クエリ文字列の前の URL の部分と照合されます (例: "/app1/index.html")。

および htaccess コンテキストではDirectory、パターンは最初に、サーバーを現在のパスに導くプレフィックスを削除した後、ファイルシステム パスと照合されますRewriteRule(たとえば、ディレクティブが定義されている場所に応じて「app1/index.html」または「index.html」)。 .

于 2012-10-30T06:26:27.563 に答える