htaccess 使用 CloudFlare 嗅探器将任何域重写为 www+SSL
htaccess rewrite any domain to www+SSL with CloudFlare sniffer
我 运行 几个 Wordpress-based 网站通过 CloudFlare 获得反向代理。我想将裸域(但不是子域!)重定向到 'www.domain',如果启用了 CloudFlare,则强制执行 SSL(重定向到 'https://')。但是如果 CloudFlare 被禁用,那么它应该只通过标准 HTTP 重定向到 'www'。
请注意,这应该通过尽可能少的重定向来实现,以尽量减少请求的数量。此外,该代码应该可以在任何域中重复使用。
To-date,我想出了下面的代码 - 但它有一个问题,在下面。
# 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
这似乎在浏览器中有效,但 header 嗅探器显示不可接受的数字或重定向。我正在使用 Web-sniffer,它显示请求首先将 301 重定向到 www,然后再将 301 重定向到 SSL。不知道为什么,但这通常应该进入一个 301 重定向 - 直接到“https://www”。
另外,我对我的 CloudFlare 嗅探器不是很确定。
任何建议将不胜感激。
试试:
# 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
我 运行 几个 Wordpress-based 网站通过 CloudFlare 获得反向代理。我想将裸域(但不是子域!)重定向到 'www.domain',如果启用了 CloudFlare,则强制执行 SSL(重定向到 'https://')。但是如果 CloudFlare 被禁用,那么它应该只通过标准 HTTP 重定向到 'www'。
请注意,这应该通过尽可能少的重定向来实现,以尽量减少请求的数量。此外,该代码应该可以在任何域中重复使用。
To-date,我想出了下面的代码 - 但它有一个问题,在下面。
# 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
这似乎在浏览器中有效,但 header 嗅探器显示不可接受的数字或重定向。我正在使用 Web-sniffer,它显示请求首先将 301 重定向到 www,然后再将 301 重定向到 SSL。不知道为什么,但这通常应该进入一个 301 重定向 - 直接到“https://www”。
另外,我对我的 CloudFlare 嗅探器不是很确定。
任何建议将不胜感激。
试试:
# 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