Apache mod_rewrite を使って http は https に,example.org は www.example.org に転送する設定.以下.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^/?(.*) https://www.%{HTTP_HOST}/$1 [R=301,L,NE]
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L,NE]
</IfModule>
-
最初の
RewriteCondは FQDN が www. で始まっていない場合に引き続くRewriteRuleを適用するように書いている.NCは大文字小文字の区別をしない flag.これが無いと,WWW.example.org から www.WWW.example.org に転送される. -
2つ目の
RewriteCondは HTTPS か否かの判定.Apache の Confluence RewriteHTTPToHTTPS の記述に倣ったが,RewriteCond %{HTTPS} offと書いても同じ. -
RewriteRuleは2つともほぼ同じ書き方にしてあって,ドメイン名に非依存な書き方にしてある.Rは転送,301 はそのコード(Moved Permanently)Lはこのルールで一旦終了という意味(ここまでの条件にマッチしていたらここで終了する).NEは URL を書き換える際にエスケープしないというフラグ.これが無いと&や?,#がエスケープされて本来のURLと異なる URL に転送される,かもしれない(そもそも#は一般的にはリクエストに含まれないだろうし,&や?がエスケープされていたとしても解釈可能なはずなので,特にこのオプション不要かもしれないが,未検証). -
まとめると,以下は1つ目のルールで https://www.example.org/ に転送していて,
- http://example.org/
- https://example.org/
http://www.example.org/ は 2つ目のルールで https://www.example.org/ に転送される.