2

ローカル開発セットアップには DMZ にボックスが必要であり、各開発者はプロキシ用の apache 構成に行を持っています。次のようになります。

ProxyPreserveHost on

ProxyPass /user1/ {user1's IP}
ProxyPassReverse /user1/ {user1's IP}

ProxyPass /user2/ {user2's IP}
ProxyPassReverse /user2/ {user2's IP}

#etc

私たちの公開 URL は 、 などになります{DMZ server}/user1{DMZ server}/user2問題 、開発者のボックスでは、 の値がユーザーのサブディレクトリなし$_SERVER['HTTP_HOST']でただ{DMZ server}であることです。望ましい動作は、実際のホスト名として持つことです。/user%/

HOST変数といくつかの書き換えルールをオーバーライドしようとしましたが、何も機能しませんでした。

サブドメインの作成はオプションではありません。

助けてくれてありがとう!

4

3 に答える 3

4

http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehostが答えのようです。

于 2012-04-23T17:23:24.177 に答える
1

私は刺すつもりで、これを提案します:

SetEnvIf Host (.*) custom_host=$1
RequestHeader set X-Custom-Host-Header "%{custom_host}e/%{REQUEST_URI}e/%{QUERY_STRING}e"

これにより、X-Custom-Host-Header という要求ヘッダーが設定され、PHP で取得できるようになるはずです。必要に応じて、ホスト ヘッダーを上書きすることもできますが、その影響についてはわかりません。Host ヘッダーは特別な HTTP ヘッダーであり、通常、完全な要求 URL ではなく、HTTP 要求のホスト部分のみが含まれます。

残念ながらテストされていませんが、探しているものをもう少し詳しく説明していただけると助かります。

于 2012-04-24T19:50:56.893 に答える
0

編集、3番目の答え:

Apache は以前にこの苦情を聞いたようで、解決策はmod_substitute. 挿入するドキュメントで返されるすべての URL を書き換えるには、これを使用する必要があります/user1/

編集、2番目の答え:

コメントの追加情報に基づいて、DMZ サーバーの Apache 構成は正しいと思います。あなたが求めているのは、開発者のマシンにコンテキスト パスを含む URL を生成させることです (これは、あなたの/user1/ビットに類似したものを表す J2EE 用語です)。私は PHP の経験がないので、そのような機能があるかどうかはわかりませんが、簡単に検索すると、ないことがわかります

それ以外の場合は、相対 URL を絶対 URL に変換する独自の関数を展開し、それを構成可能にして、ホスト名に何かを追加できるようにし、URL を生成するためだけにその関数を使用するように全員に強制する必要があります。ローカル ファイルの検索に関連する問題の解決策については、この古い (時代遅れの) PHP ベスト プラクティス記事の「アプリケーションの場所を独立させる」を参照してください。

前の回答: (動作しない、リダイレクト ループが発生する)

あなたが何をしようとしているのか、または「さまざまなアプリケーションをホストするために、開発アプリで実行するのは主にApacheとPHPです」という意味はまだはっきりしていませんが、経験に基づいた推測として、試しましたか:

ProxyPass /user1/ {user1's IP}/user1/
ProxyPassReverse /user1/ {user1's IP}/user1/

あなたが望んでいるような環境を私が設定しているのであれば、開発マシンの環境がその上で実行されているコードにとって本番環境と同じように見えるように(または少なくともそれ以上に)、すべての開発マシンにいる$_SERVER['HTTP_HOST']ことを望みます。 {DMZ server}.

于 2012-04-25T02:00:58.293 に答える