回答編集履歴

2 SNI SSLの記入ミス修正

Tomak

Tomak score 1601

2017/09/08 18:24  投稿

さくらマネージドサーバーを使用しています。質問に関しての設定はほぼレンタルサーバーと同じなので、SSL導入時の調査に基づいて回答します。(若干違うかもしれませんが。。。違ったらすみません)
さくらの`SNI SSL`が有効になっていて、http://にリクエストがあった場合、`%{HTTP:X-Sakura-Forwarded-For}`という変数は空になります。https://がリクエストの場合は`%{HTTP:X-Sakura-Forwarded-For}` = `クライアントIPアドレス`となります。
http://にリクエストがあった場合、`%{HTTP:X-Sakura-Forwarded-For}`という変数は空になります。https://がリクエストの場合は`%{HTTP:X-Sakura-Forwarded-For}` = `クライアントIPアドレス`となります。
| プロトコル | %{HTTP:X-Sakura-Forwarded-For}変数値 |
|-----------|------------|
| http     | 空 |
| https    | クライアントIPアドレス |
http://でもhttps://でも80番ポートがサーバーのアクセスポートになります。これは、公式サイトのドキュメントによるとサクラサーバーのSSLは`80番ポートのProxy`として動作しているためらしいです。
 
さくらサーバーのビジネスプラン以上ではIPベースのSSLが導入可能で本件の問題は関係ありません。レンタルサーバーなどではSNI SSLのみしか対応されていないため、本件の問題はSNI SSL特有の問題ということができます。  
 
有効なSSLを用意しているか否かについては`%{HTTP:X-Sakura-Forwarded-For}`の変数値には関係ないと思われます。(違うかもしれません)  
まとめると、リライト設定は下記のように書けると思います。
```apache
RewriteEngine On
#RewriteCond %{HTTPS} !=on   #たぶんこれは必要ない
RewriteCond %{HTTP_HOST} ^ドメイン(ie: example.com)$ [NC]
RewriteCond %{HTTP:X-Sakura-Forwarded-For} !^$
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
```
※http://への統一なので`R=301`としています(何もつけないと302テンポラリーリダイレクトになります)
※http://への統一なので`R=301`としています(何もつけないと302テンポラリーリダイレクトになります)
1 補足追加

Tomak

Tomak score 1601

2017/09/08 17:48  投稿

さくらマネージドサーバーを使用しています。質問に関しての設定はほぼレンタルサーバーと同じなので、SSL導入時の調査に基づいて回答します。(若干違うかもしれませんが。。。違ったらすみません)  
 
さくらの`SNI SSL`が有効になっていて、http://にリクエストがあった場合、`%{HTTP:X-Sakura-Forwarded-For}`という変数は空になります。https://がリクエストの場合は`%{HTTP:X-Sakura-Forwarded-For}` = `クライアントIPアドレス`となります。
| プロトコル | %{HTTP:X-Sakura-Forwarded-For}変数値 |
|-----------|------------|
| http     | 空 |
| https    | クライアントIPアドレス |
http://でもhttps://でも80番ポートがサーバーのアクセスポートになります。これは、公式サイトのドキュメントによるとサクラサーバーのSSLは`80番ポートのProxy`として動作しているためらしいです。
まとめると、リライト設定は下記のように書けると思います。
```apache
RewriteEngine On
#RewriteCond %{HTTPS} !=on   #たぶんこれは必要ない
RewriteCond %{HTTP_HOST} ^ドメイン(ie: example.com)$ [NC]
RewriteCond %{HTTP:X-Sakura-Forwarded-For} !^$
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
```
※http://への統一なので`R=301`としています(何もつけないと302テンポラリーリダイレクトになります)

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る