我的网站https://stage.issufy.com/ ,设置ssl后,我得到302redirect循环。 这里是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:
<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>
这里是sslconfiguration:
<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>
网站工作正常,没有云,但一旦启用了cloudflare,它会给出302redirect的错误。
这里是错误日志
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的Flexible SSL产品,则您的原始Web服务器将在端口80下看到未encryption的stream量。
为了解决这个问题,你有几个select:
X-Forwarded-Proto (显示用户连接到Cloudflare的情况)。 似乎Cloudflare的nginx因为一些redirect规则而感到困惑:
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
这似乎是你的configuration中唯一的302(临时)redirect。
CloudFlare SSL如何实施? 如果您使用CloudFlare作为处理SSL(唯一的免费版AFAIK选项)的前端代理,那么您的网站仍将HTTP(端口80)上的内容提供给CloudFlare,并且连接仅从CloudFlareencryption到客户端。 在这种情况下,上面的redirect确实会导致302redirect循环。 (这通常应该实施为301.即Redirect 301 ... )
如果是这种情况,那么还有一些额外的HTTP请求头可以检查客户端是否通过HTTPS访问您的网站(或CloudFlare)。
RewriteEngine on RewriteCond %{SERVER_NAME} =stage.issufy.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
顺便说一句,这是试图做同样的事情上面的单个Redirect指令(虽然永久 )。 使用一个或另一个,而不是两个。
最好你会使用一个单一的Redirect 301 (mod_alias)指令。 但是,如果您需要检查代理HTTP请求头以确定HTTPS,那么您将需要mod_rewrite。