.htaccess への記述追加 – https リダイレクト

WordPress
スポンサーリンク

背景

本ブログもSSL認証を取得して運営を開始したのですが、どうやら検索エンジンには SSL接続の “https” と 非SSL接続の “http” の両方が登録されているみたいです。

それでも別にいいかなと思っていたのですが色々調べてみると “https://” と “http://” は別サイトとして認識されてしまうようで、折角のアクセスが分散してしまいます。これでは検索順位的に勿体無い事になるので、”http” で接続してみた人を、”https” にリダイレクト(飛ばす)ように修正してみたいと思います。

.htaccess への記述追加

記述内容

リダイレクトの方法を調べてみると、サクラのレンタルサーバのヘルプ

.htaccessによるアクセス制御 – さくらのサポート情報
.htaccessを配置することで、ウェブアクセスに関わる設定を行なう事ができます。 前提条件 .htaccessファイルの作成方法 mod_rewriteを使ったアクセス制御 URL書き換えリダイレクトを行いたい 初期...

にその方法が載っていました。それによると “.htaccess” へ下記の記述を追加する必要があるみたいです。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

.htaccessはリダイレクト元のドキュメントルートに設置してください。

サクラのレンタルサーバ https://help.sakura.ad.jp/206054622/#06

困りごと

サクラレンタルサーバのヘルプで記載内容はわかりましたが、”.htaccess” は下記の内容で初めから存在していています。ヘルプには「どこに」、「どうやって」したら追記は良いのか記載がないため、更に調べてみる必要がありそうです。


# BEGIN WordPress
# `BEGIN WordPress` から `END WordPress` までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

追記場所

結論としては、もともと存在していた

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

というスクリプトの直ぐ上に、httpsへのリダイレクト(飛ばす)するスクリプトを追記する必要があります。つまり、


# BEGIN WordPress
# `BEGIN WordPress` から `END WordPress` までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

のように修正して保存します。(スクリプト追記の際は、必ず既存の “<IfModule・・・” の前に追記してください。順番が大切です)

これで無事に “http” から “https” へリダイレクトされるようになりました。

リダイレクト検証

アクセスの方法によっては、いままでは “http” で接続出来てしまっていました。

アクセス例_非SSL

しかし “.htaccess” へ “https” にリダイレクトするスクリプトを追記する事で、どこから来ても “https” に案内されるようになりました。仮に “http://ram64gb.com/” で直接アドレスバーに打ち込んでも、間髪おかず自動的に “https://ram64gb.com/” にリダイレクトされます。

アクセス例_SSL

補足

追記場所の項で「スクリプト追記の際は、必ず既存の “<IfModule・・・” の前に追記してください。順番が大切です」と書いたのですが、これには理由があります。

”.htaccess” に記載されたスクリプトは、上から順に実行されます。で、今回記載した”https” へのリダイレクトは優先順位が高い処理(先に実行しないといけない処理)でありますので、真っ先に実行する必要があります。

もし初めから記述されている

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

の下に(後に) “https” へリダイレクトするスクリプトを追記した場合、先に上記のスクリプトが実行されてしまい、うまくリダイレクトできない可能性があります。

なお初めから記載されている上記のスクリプトは、

#ファイルが存在しないか を判定
RewriteCond %{REQUEST_FILENAME} !-f

#ディレクトリが存在しないか を判定
RewriteCond %{REQUEST_FILENAME} !-d

# ファイルが無い、ディレクトリが無い 場合は /index.php に転送
RewriteRule . /index.php [L]

というスクリプトになっています。つまり、”http から https” へのリダイレクトより先に、”/index.php” へのリダイレクトが実施されてしまい、思った動作にならないという訳ですね。

まとめ

リダイレクトする方法は色んな所に情報があるのですが、いざ実際に “.htaccess” に追記する方法はといわれると、分かりにくいの実情です。なんてったて、ユーザーが助けを求めるサクラのレンタルサーバのヘルプにも無いんですから。

“http から https” へのリダイレクトはよく使うスクリプトなので、スクリプトの追加方法を忘れないようにしたいですね! むろん自分も含めてですが!(笑

コメント

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