.htaccessが利用できる環境でのhttpsリダイレクト設定の方法です。
GoogleがSSL保護を意識し始め、SSLが一般になりつつあります。
10月には対応していないとURLの部分が真っ赤になるだとか。
そこで、SSLを導入するわけですがそのままではhttpのURLから入ってしまうとそのままになってしまいます。
httpsへのリダイレクトには.htaccessファイルが利用可能であれば設置して対応するのが楽です。
と言う事で以下に
http://からのURLをhttps://にリダイレクトするコードを記します。
なおこのパターンはwwwありの場合、なしにするコードなので、wwwありの場合はそのまま使うとだめです。
このコードは、https://のwwwなしにリダイレクトするコードです。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
このコードを
上から順番に説明
RewriteEngine on
リダイレクトエンジンを利用可能にします。とりあえず、オンにしないと動かないです。
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
URLを見て、wwwがあるかどうかチェックして該当すれば以下のコードを適応します
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
URLをhttps://からはじまるwwwを抜きます。
%1はさっきあった^www\.(.*)$で(.*)でヒットした文字が入り、$1はこのコードの(.*)でヒットした部分が入ります。
ここで作成されたhttps://のURLへ301リダイレクトをします。Lがあるのでこの処理で終了です。
RewriteCond %{HTTPS} off
上記の条件にヒットしなかった場合、ここにたどり着きます。
httpsか、そうでないかを判定します。シンプル。
ヒットすれば次のコードを適応します。
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
現在のURLをhttpsへ301リダイレクトするコードです。Lがついたから処理が終わります。(どのみち最後ですが)
%{HTTP_HOST}はexample.comまで
%{REQUEST_URI}は/index.htmlといった部分を取得します。
このような感じで前半はwwwありをhttpsのwwwなしにリダイレクトするコード
後半はhttpsへwwwなしのものをリダイレクトするコードです。
wwwありの場合は以下です
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
wwwありとwwwなしはSSLの設定が別なので、できればどちらかのURLに統一するようにした方がいいですね。
2018/09/22追記
wwwなしはあまり変わらないけどこっちのほうもあり。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
2021/04/09追記
iclustaサーバーではRewriteCond %{HTTPS} off
こちらが利用できない。
代わりにRewriteCond %{ENV:HTTPS} !^on$
こちらを利用する
https://helpcenter.gmocloud.com/iclusta/s/article/ch-1417
2021/07/20追記
RewriteRule ^(.*)$ これはファイル名しか取得してくれないので、下層ディレクトリだと不足が生じる
そのため正規表現のデータは利用しない方法にする
wwwあり
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
コメント