example.com
wwwから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の仮想ホストのマッチングについてはよくわかりませんが、これに関する詳細情報は次のとおりです。このページ。