Apache のすべてのホストの www を削除するにはどうすればいいですか?

Apache のすべてのホストの www を削除するにはどうすればいいですか?

この件に関する SO トピックを読みました。ただし、それらは単一のホストにのみ適用されます。

現在および将来のドメインのすべてのサーバーに統一されたルールを適用したいと考えています。

基本的に、すべてのリクエストから www を削除し、ドメイン名のみにアクセスできるようにしたいと考えています。

Apache も HTTPS を提供していますが、これをすべてに適用するにはどうすればよいでしょうか?

ありがとう!

http://www.example.com >> http://example.com
https://www.example.com >> https://example.com

マリア

答え1

あなたが説明していることは、 を使用するとmod_rewrite、ある程度は不可能であるように思われます。

複数の「レベル」からの構成は ではスタックされないmod_rewriteため、メイン サーバー構成で定義されたルール セットは に委任された要求に自動的にインポートされ、適用されることはありません<VirtualHost>

ただし、いずれにせよ、ある時点で を割り当てる必要があると仮定すると<VirtualHost>、本文内に他のルールを配置する予定がない場合<VirtualHost>(.htaccessまたは<Directory>セクション内であれば問題ありません)、次のように操作することができます。

メイン構成では、この関連する質問への回答そしてそれを適用します:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]

そして、各<VirtualHost>セクションで、RewriteOptions指令:

RewriteEngine On
RewriteOptions inherit

もちろん、あるいは、ルール セット<VirtualHost>全体をそれぞれにコピーすることもできますが、これにより、関連するルール セットが 1 つの場所に保持されます。

この場合、直接ルールを追加しないことをお勧めする理由は、<VirtualHost>継承されたルールが含まれているためです。現在の構成レベルで定義したものは何でも、意図しない副作用が発生する可能性があります。

関連情報