Repliesツイートさくらレンタルサーバーの共有SSL(https://)を使う際に、.htaccessやPHPスクリプト内で、どの環境変数を評価したらよいかを記述します。WordPressでの対処法を概説します。(但し2013年9月21日現在、WordPress3.5の時点の記事です。)(2016年4月27日追記:さくらレンタルサーバーの、サーバー証明書を設定したSSLでも本手法は有効なようです。私が直接試したわけではないのですが...。)(2013年10月17日追記:さくらインターネットさんから回答が来ましたので、関連箇所に追記しました。)結論(私と同様に)困っている方のために結論から書きます。さくらレンタルサーバーの共有SSLはポート80を使っているので、環境変数SERVER_PORTではSSL接続かどうか評価できません。評価に使える環境変数は以下の通りです。.htaccessでは、SSL接続の時に、%{ENV:HTTPS}が’on’になり、また%{HTTP:X-Sakura-Forwarded-For}にはリクエスト元のIPアドレスがセットされる。PHPでは、SSL接続の時に、$_SERVER[‘HTTP_X_SAKURA_FORWARDED_FOR’]及び$_ENV[‘HTTP_X_SAKURA_FORWARDED_FOR’]にリクエスト元のIPアドレスがセットされる。PHPでは、SSL接続の時に、.htaccessのRewriteRuleにて書き換えが行われていない場合においてのみ、$_SERVER[‘HTTPS’]及び$_ENV[‘HTTPS’]が’on’になる。WordPressはRewriteRuleでの書き換えが前提です。従ってさくらレンタルサーバーにインストールしたWordPressでは、共有SSLを利用する場合において、不具合が生じうると考えられます。SSLのようなプラグインは正常動作しません。)対処法は後程書きます。(2013年9月27日追記)さくらインターネットさんのサポートページ「共有SSLの注意点」の「ウェブサーバの挙動>環境変数の取扱い」には以下の様に記されています。アクセス元となります。このため、SSLのみのアクセス許可(HTTPアクセスの制限)や、mod_rewriteによるURLの書き換えはできません。「このため」がいまひとつ理解できませんが、「mod_rewriteによるURLの書き換えはできません。」と明記していますので、「もし書き換えを行った場合、その動作保証はできません。」とも解釈できますね。(2013年9月27日追記ここまで。)(2013年10月17日追記)さくらインターネットさんから回答がきましたので転記します。しいでしょうか?(正誤いずれの場合も、その理由をご説明頂けると幸いです。設定するようサブリクエストを処理しております。よるアクセスと判定できず、HTTPS環境変数が設定されません。mod_rewriteによるURLの書き換えはできません。」というような解釈でよろしいでしょうか?左様でございます。動作できないように設定は行っておりません。お客様にて動作できるよう設定いただく場合は問題はございません。いうことですので、「あくまでも自己責任で」ということですね。(2013年10月17日追記ここまで)実験では、さくらレンタルサーバーにおいて、上記結論を検証してみましょう。適当なディレクトリ(ここではtest)を作成し、以下のようなテスト用のスクリプトを配置します。環境変数を表示するだけのスクリプトです。(余計なコードもありますが。/&gt;\r\n&quot;;//ハイライトしたい環境変数はここに追加する。array(&quot;HTTP_HOST&quot;,&quot;HTTPS&quot;,&quot;SERVER_PORT&quot;,&quot;REQUEST_FILENAME&quot;,&quot;REQUEST_URI&quot;,&quot;HTTP_X_SAKURA_FORWARDED_FOR&quot;);//表示したい環境変数のテーブルはここに追加する。/&gt;\r\n&quot;;}}yjd_debug_print(true);?&gt;&lt;/body&gt;&lt;/html&gt;.htaccess以下のような.htaccessを作成し、testディレクトリに配置します。[L]&lt;/IfModule&gt;ブラウザから「https://xxxx.sakura.ne.jp/test/echo」(xxxxは各位のユーザーID)にアクセスすると、4行目のRewriteRuleにより、各環境変数がGETメソッドのクエリーになります。test.phpによる表示で$_GETの中を見ると、以下が確認できます。%{SERVER_PORT}に’80’がセットされている。%{ENV:HTTPS}に’on’がセットされている。%{HTTP:X-Sakura-Forwarded-For}にリクエスト元のIPアドレスがセットされている。PHP既に前節での表示で、PHPの環境変数$_SERVERと$_ENVが確認できます。$_SERVER[‘SERVER_PORT’]及び$_ENV[‘SERVER_PORT’]に’80’がセットされている。$_SERVER[‘HTTP_X_SAKURA_FORWARDED_FOR’]及び$_ENV[‘HTTP_X_SAKURA_FORWARDED_FOR’]にリクエスト元のIPアドレスがセットされている。$_SERVER[‘HTTPS’]及び$_ENV[‘HTTPS’]はセットされていない。次にブラウザから「https://xxxx.sakura.ne.jp/test/test.php」(xxxxは各位のユーザーID)にアクセスしてみます。すると以下が確認できます。$_SERVER[‘HTTPS’]及び$_ENV[‘HTTPS’]に、’on’がセットされている。このアクセスは、先の.htaccessの3行目のRewriteRuleで、書き換え無しにtest.phpが呼び出されます。この場合は環境変数HTTPSがセットされるようです。(.htaccessにRewriteRuleを書かない場合も同様です。)しかし先の「echo」へのリクエストは、4行目のRewriteRuleでtest.phpに書き換えられます。このことと環境変数HTTPSがセットされないことが関係していそうです。この件をさくらインターネットさんに問い合わせていますが、未だ回答はありません。PHPでの対処法SERVER_PORTが評価に使えず、HTTPSが限定的であるとすると、HTTP_X_SAKURA_FORWARDED_FORを使う以外にありません。これに関してもさくらインターネットさんに問い合わせました。)のような評価式で>httpsアクセスかどうか判定することを推奨しますか?(本来の仕様と、>今後の変更の可能性など鑑みて)こちらにつきまして、禁止はしておりませんが推奨もしておりません。現時点では計画はございませんが、今後仕様の変更が行われる可能性はございます。(2013年8月22日の回答)WordPressの対処法WordPressの動作には、.htaccessによる書き換えが大前提になっています。従ってさくらレンタルサーバの共有SSLでは、$_SERVER[‘HTTPS’]が’on’になりません。$_SERVER[‘SERVER_PORT’]も’80’なので、それらを評価しているWordPressの関数is_ssl()はSSL接続の場合も常にfalseを返します。SSLのようなプラグインは正常動作しません。(リダイレクトループが発生します。)またWordPress内の諸所でis_ssl()をコールしているので、他にも不具合が生じると考えられます。ブログをお楽しみください。*/」の前に以下を記述します。'on';}至って簡単ですね。まとめさくらレンタルサーバーの共有SSLを利用する場合、以下の環境変数を評価に使います。.htaccessでは%{ENV:HTTPS}が’on’かどうか。PHPでは$_SERVER[‘HTTP_X_SAKURA_FORWARDED_FOR’]がセットされているかどうか。WordPressを使う場合には、2点目を利用して対処します。環境変数HTTP_X_SAKURA_FORWARDED_FORの利用は、さくらさんから「禁止も推奨も」されていませんので、仕様変更に注意する必要があります。AM参考になりました、ありがとうございます。コメントをキャンセルメールアドレスが公開されることはありません。