.htaccess htaccess将任何域重写为www+;带有CloudFlare嗅探器的SSL

.htaccess htaccess将任何域重写为www+;带有CloudFlare嗅探器的SSL,.htaccess,cloudflare,.htaccess,Cloudflare,我运行了两个基于Wordpress的网站,它们通过CloudFlare获得反向代理。我想将裸域(但不是子域!)重定向到“www.domain”,如果启用了CloudFlare,则强制使用SSL(重定向到“https://”)。但如果CloudFlare被禁用,那么它应该只通过标准HTTP重定向到“www” 注意:这应该通过尽可能少的重定向来实现,以尽量减少请求的数量。此外,该代码应可用于任何域 到目前为止,我已经提出了以下代码-但它有一个问题,下面是它的问题 # BEGIN Redirect t

我运行了两个基于Wordpress的网站,它们通过CloudFlare获得反向代理。我想将裸域(但不是子域!)重定向到“www.domain”,如果启用了CloudFlare,则强制使用SSL(重定向到“https://”)。但如果CloudFlare被禁用,那么它应该只通过标准HTTP重定向到“www”

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

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

# 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嗅探器,它显示请求首先被301重定向到www,然后被301重定向到SSL。不确定原因,但这通常应该在一个301重定向中进行-直接到“”

另外,我也不完全确定我的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

只针对一个域?因为在使用域名时测试子域要容易得多。其想法是让代码可重用,即不应该指定域名(也因为单个站点上的域别名)。目前代码运行在(通过CF)和(直接)上,可以自由测试。在你的问题中,你说“但不是子域”。但你们从来并没有测试过……我做过测试,子域(除了“www”)运行良好。别误会我的意思:我不是程序员,只是一个网站管理员,在搜索所需功能的过程中用一些代码进行试验。我的意思是,在你的.htaccess中没有测试。如果使用了子域或未使用子域,您可以在不进行测试的情况下添加www。此子域似乎没有重写为“www”。您的代码似乎仅适用于全局TLD,即具有三个字母域结尾(.com.org)的TLD,但不适用于二级域(如.ltd.uk.org.uk)。我将多个域别名添加到一个站点,这就是它显示的内容。现在可以在二级域上工作,但在两个字母的TLD(.eu、.uk、.fr)上仍然不工作。是的,抱歉,现在可以了