URLを変更せずに、サーバーの同じディレクトリを指す2つのドメイン間で転送する

Jul 17 2020

私は持っdomain1.comていdomain2.comます。

domain1.comは、123.123.123.123ディレクトリを正確に指すサーバーIPを指すメインドメインですpublic_html

domain2.comdomain1.comユーザーのブラウザでURLを変更せずに転送したいドメインです。(注:このドメインはユーザープロファイルのドメインになります)。

だから、代わりにタイピングのdomain1.com/users/John、私が入力しますdomain2.com

domain2.com()の同じIPアドレス123.123.123.123と同じディレクトリを指します。domain1.compublic_html

私は指摘domain2.comのhtaccessファイルからそれをアクセスするために、同じサーバとディレクトリにdomain1.com

だから、私は、以下の試した.htaccesspublic_html

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain2.com
RewriteRule ^(.*) https://domain1.sa/users/John/$1 [P]

しかし、これは500エラーhttpコードを返しています!

注:私は専用サーバーを持っています。

回答

1 MrWhite Jul 17 2020 at 22:23
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain2.com
RewriteRule ^(.*) https://domain1.sa/users/John/$1 [P]

mod_proxyまたはmod_rewriteが正しくインストールまたは構成されていない限り、これが500エラーになる理由は明らかではありませんか?または、おそらく他のディレクティブと競合していますか?エラーの詳細については、エラーログを確認する必要があります。

ただし、2つのドメインが同じサーバー/ディレクトリを指しdomain2.com、ブラウザのアドレスバーに(元のURL)を保持したい場合は、リクエストをプロキシする必要はありません(ここで実行しようとしているように)。必要なのは、(同じドメインでの)より単純な内部書き換えだけのようです。例えば:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain2\.com
RewriteRule !^users /users/John%{REQUEST_URI} [L]

正規表現!^usersは、書き換えループを回避することです(これは、ブラウザーで500エラーとしても現れます)。

だから、代わりにタイピングのdomain1.com/users/John、私が入力しますdomain2.com

ただし、上記では、ここで述べたように(末尾のスラッシュなしで/users/John/)ではなく、/users/John(末尾のスラッシュ付きで)リクエストが送信されることに注意してください-それは問題ですか?

そして、あなたはから書き直したいと思っている/<something>/users/John/<something>あなたが投稿コードサンプルあたりとして- ?これはあなたの質問テキストには記載されていませんが?ドメイン自体のリクエストのみを書き換えたい場合、つまり。domain2.com/そうでなけれdomain2.com/<something>ば、上記はさらに単純化することができます。例えば:

RewriteCond %{HTTP_HOST} ^domain2\.com
RewriteRule ^$ /users/John [L]