apache2 IP リダイレクトがサブドメイン リダイレクトと競合しています

apache2 IP リダイレクトがサブドメイン リダイレクトと競合しています

私のウェブサイトにアクセスすると、意図したとおりに動作します。にリダイレクトするexample.comようにリダイレクトを正常に構成しました。abc.example.comexample.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 を持つデフォルトの仮想ホストを作成するのが賢明です。同じインターフェイスとポート上にあるが個別の構成を必要とする新しいドメインは、後続の (デフォルト以外の) 仮想ホストとして追加できます。

関連情報