web-dev-qa-db-ja.com

mod_rewriteでのURLのマスキング

あるドメインから別のドメインにmod_rewriteを実行する方法はありますか?ただし、ブラウザーのURLは全体を通して同じに保ちますか?これが私が欲しいものです:

ユーザーがbacon.comのようなものを入力すると、最終的にexample.com/baconになりますが、ブラウザーのURLは常にbacon.comのままです。

基本的には、URLをマスクしながらmod_rewriteを実行したいと思います。想像を絶する例のドメインで申し訳ありませんが、それでもまだ午前10時です...他の多くの回答を確認しましたが、通常、sameドメインでのmod_rewritesは常に関係しています。彼らは、bacon.comがすでにexample.comのServerAliasであるという事実を扱っていません。

6
hohner

これを行う3つの方法を紹介します。

1仮想ホストの使用

Bacon.comがexample.comのServerAliasである場合、つまり両方が同じサーバー上にある場合、mod_rewriteをまったく使用せずにこれを実行できます。このように考えてください。mod_rewriteは、URLをファイルシステムにマップする最も基本的な方法です。したがって、正しいディレクトリをベースとして使用する別のVirtualHostを設定するだけです。

ここに簡単な例があります:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName example.com
  DocumentRoot /www/files

  [... all other config you have for example.com]
</VirtualHost>

<VirtualHost *:80>
  ServerName bacon.com
  DocumentRoot /www/files/bacon

  # To have CSS directly under /www/files/css instead of /www/files/bacon/css
  Alias /css /www/files/css

  [... all other config you have for bacon.com]
</VirtualHost>

ご覧のとおり、これは書き換えではありません。代わりに、example.com/baconのベースディレクトリを独自のDocumentRootとして使用するようにbacon.comを設定しています。

2 mod_rewriteをプロキシとして使用する

代わりにmod_rewriteを使用したい場合は、mod_rewriteをプロキシとして機能させるPフラグを使用することができます。次に例を示します。

RewriteRule /(.*) http://example.com/bacon/$1 [P]

コメントに応じて編集:

http://bacon.com/csshttp://example.com/css にする代わりに http://example.com/bacon/css 、最初に行き、その特定のURLをキャッチする別のルールを作成します。

RewriteRule /css/(.*) http://example.com/css/$1 [P]
RewriteRule /(.*) http://example.com/bacon/$1 [P]

これを行うには、mod_proxyをロードして有効にする必要があります。ただし、永続的な接続や接続プールを処理しないため、mod_proxyを直接使用する場合に比べてパフォーマンスが低下することに注意してください。したがって、VirtualHostsで希望どおりの操作ができない場合は、3番目の方法をお勧めします。

3 mod_proxyを直接使用する

<VirtualHost *:80>
  ServerName bacon.com

  ProxyPass http://example.com/bacon
  ProxyPassReverse  http://example.com/bacon
</VirtualHost>

詳細については、 mod_proxyのドキュメントを参照してください

10
Jenny D