さくらインターネットのレンタルサーバはOSのアップデートでhtaccessが書き換えられる場合があり、トップページしか表示できない現象が起きた

この記事は約6分で読めます。

sakurahtaccessset1.jpgさくらインターネットはPHPのバージョンを7月3日に強制的に7.3にアップデートする予定で、その関連でサーバのアップデートを6月26日から順次行っているようである。
そのさいに「.htaccess」の内容の一部を強制的にリライトされてしまう事例が多数あった。このことが原因で、WordPressなどで運用しているサイトに不具合が起きた。トップページ以外のページを見ることができなくなり、投稿ページや固定ページを見ようとするとすべてトップページにリダイレクトされてしまうという現象である。

不具合の例

実際に不具合が起きたサイトのひとつ「マメジン」では、
大豆の作り方
https://www.mamejin.com/daizuikusei
大豆の定植を行いました
https://www.mamejin.com/archives/642
など、どのページをクリックしても
https://www.mamejin.com/index.php
となってしまい、トップページにリダイレクトされる。以後、トップページ内のどのリンクをクリックしてもトップページしか表示されなかった。

このような不具合が起きたサイトは私が知るだけで5件以上はあった。

不具合が起きたサイトは「.htaccess」が書き換え

不具合が起きているサイトのサーバをFTPで見ると、「.htaccess」が書き換えられていた。

▼書き換えられた「.htaccess」
htaccess20190628.jpg

上記の場合は、6月27日に「.htaccess」が書き換えられ、これまでのファイルは「.htaccess-20190627_by_SAKURA」とリネームされバックアップ保存されていた。

書き換えられた「.htaccess」は

# BEGIN Force SSL for SAKURA
# RewriteしてもHTTPS環境変数を有効にする
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1

# BEGIN Force SSL for SAKURA
# RewriteしてもHTTPS環境変数を有効にする
# SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1

となっていた。

つまり

SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1
の行の頭に#が付与され、コメントアウト(無効化)するという処置である。

この部分は、さくらインターネットでWordPressを常時SSLで稼働させるために施した処理であるが、おそらくサーバのアップデートでこの部分がなんらかの不具合をおこす可能性があるためコメントアウトしたのだろう。

また、サーバのアップデートにより
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
の部分が不具合を起こすようになったようである。

ここまでわかればなんとか対応は可能である。

不具合が解決した対策

方法は「.htaccess」の中を編集することである。FTPソフトを使うか、さくらインターネットの管理画面からファイルマネージャを使う方法もある。

#SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1
はコメントアウトのままでOK。

RewriteEngine On
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://**********.com/$1 [R=301,L]

の部分は

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

に変更すればよい。

上記のhttps://**********.com/という部分は自サイトのURL名が入っているはずである。

▼常時SSLでWordPressを稼働させるための「.htaccess」を記述しておく

# BEGIN Force SSL for SAKURA
# RewriteしてもHTTPS環境変数を有効にする
# SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1

# 常時HTTPS化(HTTPSが無効な場合リダイレクト)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteCond %{REQUEST_URI} !/wp-cron\.php$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>

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

# BEGIN 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

上記の記述の特徴は独自ドメインの記述をしなくてもよいため、どのサイトでも使える万能感があることである。やっかいだったさくらインターネットのWordPressの常時SSL化はこれでひとまず収束の方向にいってほしいものだ。

この対策にたどり着くまでに参考にさせていただいたのは以下の記事である。良質な記事に感謝である。

・さくらインターネットでのHTTPSリダイレクトの書き方がOS更新後に変わるらしい
https://www.nishishi.com/blog/2019/03/sakura_https_re.html

・一部ページのみhttpsへリダイレクトさせる方法-サクラサーバー-wordpress導入

一部ページのみhttpsへリダイレクトさせる方法-サクラサーバー-wordpress導入

・さくらサーバーのhtaccessによるリダイレクトでループを防ぐ書き方。httpからhttpsにリダイレクトなんか特に。X-Sakura-Forwarded-For
http://webteq.site/archives/2235

・HTTP:X-SAKURA-FORWARDED-FORってなんだ?
https://hiramass.hatenablog.com/entry/2019/02/18/224735