WordPressをhttps(SSL)化、さくらインターネットのレンタルサーバーでリダイレクトループさせない「.htaccess」の書き方【前編】
2017/09/22
1年以上前の記事です。内容が古い可能性があります。
WordPressのhttps(SSL)化がほぼ終了しました。
思いつきで行なったため、httpとhttpsとの両方のURLで記事にアクセスできてしまう状態のまま数ヶ月。
それが直接の原因であるかは不明ですが、PVが落ちてきて結果、広告収入も落ちるという状態に。
最も、もともとhttps化すると広告収入は落ちるとGoogleさんは公式に言っていて、それもあったのかもしれません。
まあ、広告収入はいいんです。
いや、よくはないけれどもそれよりもPVが落ちてきていることのほうが問題。
ということで、PV回復のためにもhttpでのアクセスがあった時にhttpsにリダイレクトする設定を.htaccessに書くことにしました。
ただ、この設定が大変だったのです。
一般的には以下のような表記にするとhttpでアクセスがあったときにhttpsにリダイレクトしてくれます。
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
情報源: httpからhttpsに.htaccessを使ってリダイレクトさせる方法 | ホワイトベアー株式会社
が、これだとリダイレクトループになってしまい、サイトが表示すらされなくなってしまう。
というのは。
さくらインターネットのレンタルサーバー等、共有の安価なサーバーでは外向けにはhttpsを使っていても、ネットワーク内ではhttpでやり取りするという形になっているところが多いようでしてそこが落とし穴になっていました。
以下のサイトに詳しく書かれています。
原因についてはココが詳しい。ざっくりまとめると、
- ロードバランサが443へのアクセスを80へのアクセスに変換する
- .htaccess内の RewriteCond ${HTTPS} が永遠に on にならず、リダイレクトの度にRewriteRule が走ってしまう
元々のアクセスが https か http のどちらかが分かれば良いのだが、上記の挙動のせいで、https にリダイレクトしたとしても http からアクセスされたことになり、これが永遠に繰り返されてしまう。
情報源:リダイレクトループしない HTTPS強制.htaccessの書き方 (AWS、開発環境共存対応) | ikuty.com
こちらはさくらのレンタルサーバーではなく、AWS(アマゾンウェブサービス)での話。
ロードバランサというのが悪さをしているということのようです。
悪さというか、本当はサーバーの不可を減らしたりと何かの便利なロードバランサなのですが、これが443(https)へのアクセスを80(http)に変換してしまっているため、何度も何度もhttpをhttpsに書き換えるという行為が行われてしまうとのこと。
いわゆる安物買いの銭失い状態だったということでしょう。
さくらインターネットのレンタルサーバー月500円と、ラピッドSSL年1500円でhttps実装なんて虫の良いことを考えていたものですから。。
おそらく、高性能な専用サーバーであればこういったトラブルは起きないんじゃないでしょうか?
ただ、これを解消する方法はちゃんとあります。
なんでも、
ロードバランサに到着した元のアクセスが http のときに限り、X-Forwarded-Proto というヘッダが付与され値が入るらしい。なので、X-Forwarded-Protoヘッダの内容を http か https かの判断基準にすれば良い、というのが基本的なアイデア。
とのことで、具体的には以下の様は表記に変えればOKとのこと。
RewriteEngine On # Force HTTPS RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L]
ポイントは3行目の
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
の部分です。
ここで、X-Forwarded-Protoを読み取り、httpsじゃないときだけリダイレクトさせるという形にしています。
が、これはあくまでも引用元記事の筆者が使っている「AWS(アマゾンウェブサービス)」での書き方。
さくらインターネットのレンタルサーバーでは、上記の記述ではちゃんと動いてくれません。
どうも、さくらのレンタルサーバーの場合はこれにあたるのが「X-Sakura-Forwarded-For」になるようなんですよね。
と、なんとなくここまでわかったところで続きは次回。
アドセンス広告メイン
関連記事
-
-
「Windows Live メール」が起動しなくなり、何をやっても復旧しないときはハードディスク(フラッシュディスク)を整理
1年以上前の記事です。内容が古い可能性があります。もう、みんなWindows10 …
-
-
部下のモチベーションを下げる3つの禁句
1年以上前の記事です。内容が古い可能性があります。上の人達に愚痴ばっかり垂れてい …
-
-
iPhone(アイフォーン)で再生中の曲を止める方法
1年以上前の記事です。内容が古い可能性があります。僕の場合、iPhone(アイフ …
-
-
勝間和代さんにTwitterを学ぶ (2010/1/8追記)
1年以上前の記事です。内容が古い可能性があります。まだ始めたばかりの勝間和代さん …
-
-
著作権表示についてのメモ
1年以上前の記事です。内容が古い可能性があります。ホームページの著作権は本来は制 …
-
-
Flickrで「保険」と検索したらヤバい画像がたくさん出てきた
1年以上前の記事です。内容が古い可能性があります。この前の記事を書くに当たり、F …
-
-
Windows7のネットワーク設定は「アダプター設定の変更」をクリック
1年以上前の記事です。内容が古い可能性があります。ナビゲーションのインターフェー …
-
-
iPhoneユーザーに対してLINE(ライン)で隠しメッセージを送る方法
1年以上前の記事です。内容が古い可能性があります。送り先がiPhoneユーザー限 …
-
-
ブラインドタッチを覚えるための10のポイント
1年以上前の記事です。内容が古い可能性があります。先日より、ブラインドタッチを覚 …
-
-
WordPress(ワードプレス)で記事途中にアドセンス(adsense)広告を貼る方法
1年以上前の記事です。内容が古い可能性があります。実は、アドセンス(adsens …