私のウェブサイトにアクセスすると、意図したとおりに動作します。にリダイレクトするexample.com
ようにリダイレクトを正常に構成しました。abc.example.com
example.com/abc
設定ファイルは次のようになりますabc.example.com.conf
:
<VirtualHost *:80>
ServerName abc.example.com
RedirectPermanent / https://example.com/abc
</VirtualHost>
私の問題:
ブラウザに生のIPアドレスを入力して私のウェブサイトを訪問すると、リダイレクトされますが、example.com/abc
これは望ましい動作ではありません。ブラウザの生のIPは、次の場所に私をドロップするはずです。example.com
ファイルは次のとおりですexample.com.conf
:
<VirtualHost *:80>
ServerName example.com
ServerAlias example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
example.com
入力したときにの代わりに IP アドレスが提供されるようにするには、何を変更する必要がありますかabc.example.com
?
答え1
これは、vhost の 1 つがデフォルトとして動作しているためです。ServerName
サーバー レベル (つまり、ブロック内ではないVirtualHost
) の が 内の と一致する場合VirtualHost
、それがデフォルトになります。何も設定されていない場合は、通常、最初の vhost になります。
all-vhost 構成を使用していると仮定すると、答えは、ServerName example.com
(および対応するListen
) を vhost ブロックの外側に設定することです。
参照:https://httpd.apache.org/docs/2.4/vhosts/名前ベース.html
メインホストが消える
既存のものと一致しないリクエストは、ホスト名または ServerName に関係なく、グローバル サーバー構成によって処理されます。
名前ベースの仮想ホストを既存のサーバーに追加し、仮想ホストの引数が既存の IP とポートの組み合わせと一致する場合、リクエストは明示的な仮想ホストによって処理されるようになります。この場合、通常は、ベース サーバーの ServerName と一致する ServerName を持つデフォルトの仮想ホストを作成するのが賢明です。同じインターフェイスとポート上にあるが個別の構成を必要とする新しいドメインは、後続の (デフォルト以外の) 仮想ホストとして追加できます。