
この件に関する 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>
継承されたルールが含まれているためです。後現在の構成レベルで定義したものは何でも、意図しない副作用が発生する可能性があります。