私のウェブサイト https://stage.issufy.com/ 、sslを設定した後、302リダイレクトループが発生します。これがhtaccessファイルです
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
HttpのApache構成は次のとおりです。
<VirtualHost *:80>
ServerName stage.issufy.com
Redirect / https://stage.issufy.com
DocumentRoot /var/www/html/stage.issufy.com
<Directory "/var/www/html/stage.issufy.com">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =stage.issufy.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>
そしてここにSSL構成があります:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName stage.issufy.com
DocumentRoot /var/www/html/stage.issufy.com
<Directory "/var/www/html/stage.issufy.com">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/stage.issufy.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/stage.issufy.com/privkey.pem
Include /etc/letsencrypt/options-ssl-Apache.conf
</VirtualHost>
</IfModule>
ウェブサイトはクラウドフェアなしで正常に動作しますが、クラウドフレアが有効になるとすぐに、302リダイレクトのエラーが発生します。
これがエラーログです
172.68.51.31 - - [17/Jan/2017:18:24:18 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:18 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:18 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:19 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:19 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:19 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:20 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:20 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
CloudflareのFlexibleSSLオファリングを使用している場合-OriginWebサーバーは、ポート80で暗号化されていないトラフィックを受信します。
2つでこれを解決するには、いくつかのオプションがあります。
X-Forwarded-Proto
を説明するようにApacheを設定します(これにより、ユーザーがCloudflareに接続しているものが明らかになります)。Cloudflareのnginxは、リダイレクトルールが原因で混乱しているようです。
HTTP/1.1 302 Found
Date: Tue, 17 Jan 2017 18:18:09 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: keep-alive
Set-Cookie: __cfduid=da71659f540fb5dad0c47d48669012aa61484677089; expires=Wed, 17-Jan-18 18:18:09 GMT; path=/; domain=.issufy.com; HttpOnly
Location: https://stage.issufy.com
Server: cloudflare-nginx
CF-RAY: 322bcedefcc859d2-VIE
.htaccessファイルを完全に無効にしてから、ルールごとに再度追加して問題を解決しようとしましたか?
Redirect / https://stage.issufy.com
これは、構成内の唯一の302(一時的な)リダイレクトのようです。
CloudFlare SSLはどのように実装されていますか? SSLを処理するフロントエンドプロキシとしてCloudFlareを使用している場合(無料バージョンAFAIKの唯一のオプション)、Webサイトは引き続きHTTP(ポート80)でCloudFlareにコンテンツを提供し、接続は暗号化されるだけですCloudFlareからクライアントへ。この場合、上記のリダイレクトは実際に302リダイレクトループになります。 (これは通常、301として実装する必要があります。つまり、Redirect 301 ...
)
この場合、クライアントがHTTPSでサイト(またはCloudFlare)にアクセスしているかどうかを確認できる追加のHTTPリクエストヘッダーがいくつかあります。
RewriteEngine on RewriteCond %{SERVER_NAME} =stage.issufy.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
ちなみに、これは上記の単一のRedirect
ディレクティブと同じことを行おうとしています(ただし永続的に)。両方ではなく、どちらか一方を使用してください。
できれば、単一のRedirect 301
(mod_alias)ディレクティブを使用します。ただし、HTTPSを判別するためにプロキシHTTP要求ヘッダーをチェックする必要がある場合は、mod_rewriteが必要になります。