httpsのリダイレクト設定

この記事は約4分で読めます。
スポンサーリンク

.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]

コメント

タイトルとURLをコピーしました