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/ に転送される.