我运行了几个基于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嗅探器。
非常感谢任何建议。
答案 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