【最新版】さくらインターネット・URL正規化リライトルール設定

シェアする

98644afdeda33330ff5a8f6908c39696 - 【最新版】さくらインターネット・URL正規化リライトルール設定

はじめに

久々にITの記事を書きます。というのは、結構なドハマリをしたので、備忘録としても残したいと思い、この記事を書くことにしました。

さくらインターネットのサーバーレンタルを開始して、早10年。静的HTMLのみで作っていたサイトから始まり、時代は移り行きまして、Wordpressを用いてブログまで始めてしまいました。SSL化したこともありました。

7266d54b801964ac3119dac3f0c5ca0a 100x100 - 【最新版】さくらインターネット・URL正規化リライトルール設定
さくらインターネット上でWordpressをSSL化するプラグインがリリースされたというのを聞き、自身のサイトもSSL化することにしました。...

今回は、PHPモジュール化によるWordpress高速化を実現するため、さくらインターネットのスタンダードプラン間でのお引越しをすることにしました。さくらインターネット上で、Snapupを使用し、Wordpressを移行したのです。

【最新版】さくらインターネット・SnapupでWordpressを移行

WordPress移行作業後、URLの正規化をリライトルールで設定しています。詳細は以下でご覧ください。

af894154e4797e0ba9197049e80f4094 100x100 - 【最新版】さくらインターネット・URL正規化リライトルール設定
はじめに 久々にITの記事を書きます。というのは、結構なドハマリをしたので、備忘録としても残したいと思い、この記事を書くことにしました。...

ですが、この時、URLの正規化とリライトルールに少し手こずりましたので、備忘録として本件を残したいと思います。

URL正規化

.htaccessにrewriteルールを設定する

サイトを公開できるようになった状態で、SEOのためにドメインをwwwありにするか、wwwなしにするかを統一します。弊サイトであれば、以下のパターンでのアクセスが考えられます。

アクセスURLのパターン

wwwあり

  • https://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あり」に統一されるようにしました。

2018年4月までに、さくらのレンタルサーバ、さくらのマネージドサーバにおいて、.htaccessのみで www付きのドメインでWordPressを利用中のウェブサイトをSSL化する事ができるようになりました。ドメインのwww.付き/無しの統一方法については、下記のページをご参照ください。 .htaccessによるア...

.htaccessの一部抜粋ですが、以下の設定をしています。

<IfModule mod_rewrite.c>
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]
</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

解説

コメントを付けて、設定したリライトルールを具体的に解説します。

##アクセスされた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の正規化とリライトルールを設定し、備忘録も残しつつ、最後までやり切ってよかった、と思えるようになりました。

ハマりそうな注意事項がたくさんあり、かつキャッシュが強く効くようになっている昨今の環境では、自身の行った設定が正しいのか、もしくは反映されていないのかということが判断しにくくなっています。

この記事をご覧の方が、エラーログを確認したり、公式サポートを利用しつつ、それでも困ったときの情報となり、スムーズな移行ができることを願っています。