新・元地方の中規模印刷会社で苦悩するWebデザイナー改めWebディレクターの日記

自由な20代、窮屈な30代を経て、遂に40代になっちまったWebディレクター&パソコン講師の覚書と思う言(こと)。略称【ちほちゅう】

*

WordPressをhttps(SSL)化、さくらインターネットのレンタルサーバーでリダイレクトループさせない「.htaccess」の書き方【後編】

   

  • このエントリーをはてなブックマークに追加

1年以上前の記事です。内容が古い可能性があります。

以下の続きとなります。

WordPressをhttps(SSL)化、さくらインターネットのレンタルサーバーでリダイレクトループさせない「.htaccess」の書き方【前編】

前編はぶっちゃけ、さくらのレンタルサーバーに関してではなく、AWS(アマゾンウェブサービス)に関しての記事になってしまっていました。
タイトルも「AWS(アマゾンウェブサービス)でリダイレクトループさせない「.htaccess」の書き方」に変えたほうが良かったかもしれません。
実際、紹介されているスクリプトはそのための記述となっていますし。(動作確認はしておりませんが)

スポンサーリンク
 

で、本題です。

前編の最後にAWSの「X-Forwarded-Proto」に当たるのがさくらのレンタルサーバーでは「X-Sakura-Forwarded-For」になる。
みたいなことを書きました。

ここ、実は厳密には違うようでして。。

というのは、前編で紹介したスクリプトの「X-Forwarded-Proto」を単純に「X-Sakura-Forwarded-For」に書き換えただけではちゃんと動いてくれなかったから。

こんな感じですね。

RewriteEngine On
# Force HTTPS
RewriteCond %{HTTP:X-Sakura-Forwarded-For} !=https
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L]

これではダメでした。

ただし、考え方的には同じなようでして、それに関しては以下のサイトを参考にさせていただきました。

さくらのレンタルサーバで共有SSLを使用する場合、以下の点に留意する必要がある。

(中略)

PHP からの参照時
  • SSLアクセス時には、$_SERVER[‘HTTP_X_SAKURA_FORWARDED_FOR’] および $_ENV[‘HTTP_X_SAKURA_FORWARDED_FOR’] にはクライアント(リクエスト元)のIPアドレスが設定される。
  • SSLアクセスした場合であっても、mod_rewrite.c の RewriteRule によりリライトされるケースでは、$_SERVER[‘HTTPS’] と $_ENV[‘HTTPS’] が設定されない。
    RewriteRuleの[R]フラグによりhttps://〜にリダイレクトされた場合には ‘on’ が設定される。

WordPress 等では、SSL 接続かどうかを $_SERVER[‘HTTPS’] もしくは $_ENV[‘HTTPS’] の状態で判別している。
このため、上記のように $_SERVER[‘HTTP_X_SAKURA_FORWARDED_FOR’] が設定されているかどうかで SSL かどうかを判別し、SSL の場合には $_SERVER[‘HTTPS’] および $_ENV[‘HTTPS’] に ‘on’ を設定するような処理を追加してやる必要がある。

情報源: さくらのレンタルサーバ・共有SSLで .htaccess によりSSLのみのアクセス許可を設定する方法 – 風柳メモ

原因がロードバランサにあるのかどうかはわかりませんが、さくらのレンタルサーバーで「RewriteRule」を使ったリダイレクトをすると「$_SERVER[‘HTTPS’] 」や「 $_ENV[‘HTTPS’]」が設定されず、それが原因でSSL通信と判断されずにリダレクトを起こしているとのこと。

ということで、$_SERVER[‘HTTP_X_SAKURA_FORWARDED_FOR’] が設定されているかどうかで SSL かどうかを判別し、SSL の場合には $_SERVER[‘HTTPS’] および $_ENV[‘HTTPS’] に ‘on’ を設定するような処理を追加してやるということになります。

ということで最終的には上記サイトの記述を使わせていただくことにしました。。

RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

情報源: さくらのレンタルサーバ・共有SSLで .htaccess によりSSLのみのアクセス許可を設定する方法 – 風柳メモ

ポイントは2行目ですね。
こちらで「X-Sakura-Forwarded-For」が設定させているかどうかを見てリダイレクトをさせています。
むしろ、1行目はなくても動くようですね。(念のため、そのままにしておりますが。。)

なんだかまだ、モヤモヤしているのですが、一先ずこれで解決。

とはいえ、

将来的にさくら側で仕様変更が行われると、%{HTTP:X-Sakura-Forwarded-For}による判別が出来なくなる可能性はある。

とのことですから、いずれ時間を取って根本的な解決方法を探ってみたいと思います。

 - WordPress, プログラミング, 覚え書き , , , , , ,

アドセンス広告メイン

Message

メールアドレスが公開されることはありません。

  関連記事

AS3でプルダウンメニュー(ActionScript3.0勉強中! #3)

1年以上前の記事です。内容が古い可能性があります。以前、ActionScript …

耳掃除(耳かき)はやっちゃダメ。耳垢には役目があるとアメリカ医学会が警告

1年以上前の記事です。内容が古い可能性があります。耳掃除は実はやる必要が無いとい …

スマホサイト(スマートフォンサイト)のソース(HTML)を見る方法

1年以上前の記事です。内容が古い可能性があります。最近ではPCサイト並に重要視さ …

ステップサーバーではPASVモードは使わない

1年以上前の記事です。内容が古い可能性があります。ステップサーバーでFTP転送す …

Skype(スカイプ)を使ってチャットをするまで(ID取得編)

1年以上前の記事です。内容が古い可能性があります。1. ID取得編 → …

角丸(かどまる)の大きさを簡単に調節できる技【Illustrator】

1年以上前の記事です。内容が古い可能性があります。久しぶりにイラストレーター(I …

突然メールが送信できなくなった(サブミッションポート)

1年以上前の記事です。内容が古い可能性があります。会社で突然メールが送信できなく …

no image
いいこと

1年以上前の記事です。内容が古い可能性があります。いいこと思いつきました。

イベント支援ツール「ATND(アテンド)」でイベントに参加する方法

1年以上前の記事です。内容が古い可能性があります。そもそも、ATND(アテンド) …

no image
Yahoo!ブログにYoutube動画を埋め込む方法

1年以上前の記事です。内容が古い可能性があります。ライブドアブログが死んでいたと …

血液型オヤジ