はじめに
久々にITの記事を書きます。というのは、結構なドハマリをしたので、備忘録としても残したいと思い、この記事を書くことにしました。
さくらインターネットのサーバーレンタルを開始して、早10年。静的HTMLのみで作っていたサイトから始まり、時代は移り行きまして、Wordpressを用いてブログまで始めてしまいました。SSL化したこともありました。
今回は、PHPモジュール化によるWordpress高速化を実現するため、さくらインターネットのスタンダードプラン間でのお引越しをすることにしました。さくらインターネット上で、Snapupを使用し、Wordpressを移行したのです。
【最新版】さくらインターネット・SnapupでWordpressを移行
WordPress移行作業後、URLの正規化をリライトルールで設定しています。詳細は以下でご覧ください。
ですが、この時、URLの正規化とリライトルールに少し手こずりましたので、備忘録として本件を残したいと思います。
URL正規化
.htaccessにrewriteルールを設定する
サイトを公開できるようになった状態で、SEOのためにドメインをwwwありにするか、wwwなしにするかを統一します。弊サイトであれば、以下のパターンでのアクセスが考えられます。
アクセスURLのパターン
wwwあり
- http://www.kengenius.com
- https://www.kengenius.com
wwwなし
- http://kengenius.com
- https://kengenius.com
.htaccessで設定をすることで、上記いずれのドメインへのアクセスであっても、全て「https接続 + wwwあり」に統一されるようにしたいと思います。
注意事項その1:X-Sakura-Forwarded-Forは使えない
他のブログでも多数記載されていますが、さくらインターネットの仕様としてリバースプロキシサーバーからのHTTP通信のヘッダーに「X-Sakura-Forwarded-For」が記載されて”いました”。FreeBSD9までのサーバーOSでは。
さくらインターネットサポートの回答
この点について、さくらインターネットのサポートに確認しました。
現在ではFreeBSD10へのアップデートに伴い、サーバー変数「%{HTTP:X-Sakura-Forwarded-For} ^$」は無効化され、使えなくなったという回答を得ました。そして、このサーバー変数を利用した記述「%{HTTP:X-Sakura-Forwarded-For} ^$」を使用すると、サーバー全体がエラーになる、という回答を得ました。
.htaccessの設定
その上で、さくらインターネットの公式ページを参考にし、全て「https接続 + wwwあり」に統一されるようにしました。
.htaccessの一部抜粋ですが、以下の設定をしています。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(kengenius\.com) [NC]
RewriteRule ^(.*) https://www.kengenius.com/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
解説
コメントを付けて、設定したリライトルールを具体的に解説します。
##アクセスされたURLが「kengenius.com」だったら、「https://www.kengenius.com」に書き換える
RewriteCond %{HTTP_HOST} ^(kengenius\.com) [NC]
RewriteRule ^(.*) https://www.kengenius.com/$1 [R=301,L]
##アクセスされたURLがhttpsではなかったら(httpだったら)、httpsに書き換える
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
というようになっています。
# BEGIN WordPress から # END WordPressについては、Wordpressをインストールするとデフォルトで挿入される箇所ですが、この箇所とリライト設定の記述順が逆転していると、無限ループを起こします。それは、[L]の配置があるためです。
注意事項その2:リライトルールの[L]
勘違いされがちですが、理由はリライトの[L]が意味するところにあります。
[L]を持ったリライトルールが実行された場合、以降のリライト条件やルールを無視します。しかしその後、リライトルールは書き換えられたURLに対して再評価します。つまりは、書き換えられたURLは再度設定されたリライト条件を通過するのです。
従って、書き換え前のURLと書き換え後のURL両方にマッチしてしまうルールが設定されている場合、ループします。それを避けるべく、.htaccessにおける記載順は上述の通り順序を守る必要があります。
注意事項その3:.htaccessのバックアップファイル名
また、.htaccessを設定する際、バックアップ用途等であってもhtから始まるような似たファイル名で別名保存していると、.htaccessであるという解釈をされる可能性があるということですので、気をつけましょう。
さいごに
最終的にこのkengenius.comがPHPモジュール化で高速で動作するようになり、非常に軽快に動くようになりました。移行と共に、URLの正規化とリライトルールを設定し、備忘録も残しつつ、最後までやり切ってよかった、と思えるようになりました。
ハマりそうな注意事項がたくさんあり、かつキャッシュが強く効くようになっている昨今の環境では、自身の行った設定が正しいのか、もしくは反映されていないのかということが判断しにくくなっています。
この記事をご覧の方が、エラーログを確認したり、公式サポートを利用しつつ、それでも困ったときの情報となり、スムーズな移行ができることを願っています。
コメント