htaccess使用CloudFlare嗅探器将任何域重写为www + SSL

时间:2015-12-01 18:15:49

标签: .htaccess cloudflare

我运行了几个基于Wordpress的网站,通过CloudFlare进行反向代理。我想将裸域(但不是子域名)重定向到www.domain'并且,如果启用了CloudFlare,则强制执行SSL(重定向到' https://')。但是如果CloudFlare被禁用,那么它应该只重定向到www'超过标准HTTP。

请注意,这应该通过尽可能少的重定向来实现,以最小化请求的数量。此外,代码应该可以重用于任何域。

到目前为止,我已经提出了以下代码 - 但它有一个问题,在下面。

# BEGIN Redirect to www & SSL
    RewriteEngine On
# If CloudFlare headers are not set, rewrite bare domain to 'www':
    RewriteCond %{HTTP:CF-Visitor} !=='"scheme":"http"'
    RewriteCond %{HTTP:CF-Visitor} !=='"scheme":"https"'
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule .* http://www\.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# If CloudFlare headers are set, rewrite bare domain to 'www' via SSL:
    RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
    RewriteCond %{HTTP:CF-Visitor} '"scheme":"https"'
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule .* https://www\.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# If CloudFlare headers are set, rewrite non-SSL to SSL:
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"'
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# END Redirect to www & SSL

这似乎可以在浏览器中使用,但是标题嗅探器显示不可接受的数字或重定向。我正在使用Web-sniffer,它显示请求首先被301重定向到www,然后301被重定向到SSL。不知道为什么,但通常应该在一个301重定向 - 直接到' https://www'。

另外,我并不完全确定我的CloudFlare嗅探器。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

尝试:

# BEGIN Redirect to www & SSL
    RewriteEngine On
# If CloudFlare headers are not set, rewrite bare domain to 'www':
    RewriteCond %{HTTP:CF-Visitor} !scheme
    RewriteCond %{HTTP_HOST} ^[^.]+\..{2,6}$
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# If CloudFlare headers are set, rewrite bare domain to 'www' via SSL:
    RewriteCond %{HTTP:CF-Visitor} scheme
    RewriteCond %{HTTP_HOST} ^[^.]+\..{2,6}$
    RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# If CloudFlare headers are set, rewrite non-SSL to SSL:
    RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"'
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# END Redirect to www & SSL