Apacheの000-default.conf - 奇妙な動作

Apacheの000-default.conf - 奇妙な動作

example.comwwwからwwwではなくwwwからwwwへのリダイレクトを実装しようとしていますwww.example.com

私のものsites-available/example.com.confファイルは次のようになります。

<VirtualHost *:80 *:443>
        ServerName www.example.com
        ServerAdmin [email protected]

        DocumentRoot /var/www/example.com/public_html

        ErrorLog /var/www/example.com/logs/error.log
        CustomLog /var/www/example.com/logs/access.log combined
</VirtualHost>

<VirtualHost *:80>
        ServerName example.com
        Redirect permanent / http://www.example.com
</VirtualHost>
<VirtualHost *:443>
        ServerName example.com
        Redirect permanent / https://www.example.com
</VirtualHost>

私のものsites-available/000-default.confファイルは次のようになります。

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/default/public_html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

今..要求すると、http://www.example.com要求どおりに応答します。ただし、要求されたら、http://example.comの設定を使用して要求をレンダリングします000-default.conf

000-default.conf接続を解除するとsites-enabled/問題は解決しますが、私は望んでいません(未知の要求に対するデフォルトの動作を維持したい)。

ここで問題は何ですか?構成が000-default.confリダイレクトをオーバーライドするのはなぜですか?

答え1

domain.com 仮想ホストはwww.example.com名前でのみ指定されるため、Apache はマッチ指定されたときwww

ServerName www.example.com

代わりに、次の構成を使用できます。

ServerName example.com
ServerAlias www.example.com

編集する:私の考えでは、あなたの場合、Apacheは次のような順序で仮想ホストを一致させようとします。

www.example.com > default > example.com (80) > example.com (443)

ホストはポート80で送信されたすべての要求と一致するため、default他の2つの要求はテストされません。これは、デフォルト値を削除すると構成が正常に機能する理由も示しています。

私はApacheの仮想ホストのマッチングについてはよくわかりませんが、これに関する詳細情報は次のとおりです。このページ

関連情報