http://www.example.jp の場合には、https://www.example.jp にリダイレクトしたいのだろうと推測して、回答します。
「URLを「wwwあり」かつ「https」にしたい」を実現するために、
リダイレクトする前のURLが以下のどれに該当するかを判断して、それぞれに必要な処置(各行末の大括弧)をしなくてはいけません。
- ホストがwwwで始まっていて、http {httpをhttpsに変える}
- ホストがwwwで始まっていて、https {そのままで良い(何もしない)}
- ホストがwwwで始まっていなくて、http {ホストの前に"www."を追加し、httpをhttpsに変える}
- ホストがwwwで始まっていなくて、https {ホストの前に"www."を追加する}
<何が起きているのか>
質問のhtaccessの前半
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*) https://www.%{HTTP_HOST}/$1 [R=301,L]
で、3)と4)の場合(ホストがwwwで始まっていない)が、www.をホスト名の先頭に追加して、httpsにリダイレクトされるので、希望する動作になっています。
ところが、質問のhtaccessの後半
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
で、1)の場合(ホストがwwwで始まっていて、http)に、www.をホスト名の先頭に追加して、httpsにリダイレクトされるので、ホスト名が wwww.www.で始まることになったわけです。
<解決策>
問題は、ホスト名がwwww.で始まっているかどうかを確認しないで、無条件にwww.を追加している事です。
これは、RewriteCondを使って「ホストがwwwで始まっていない」という条件を付け加えることで解決できます。(RewriteCondを複数書くと、全ての条件がそろっている場合(AND条件)にだけRewriteRuleが適用されます)
以下のように修正してみてください。
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*) https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteEngine on
RewriteCond %{HTTPS} off
# 下の行を追加しました。
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/19 05:01