将www.重定向到非www,并使用.htaccess将所有http重定向到https
无数次被问到这个问题,但在阅读了这里的许多答案之后,我仍然无法理解这个问题。我需要重定向所有请求,如下所示:将www.重定向到非www,并使用.htaccess将所有http重定向到https,.htaccess,redirect,mod-rewrite,.htaccess,Redirect,Mod Rewrite,无数次被问到这个问题,但在阅读了这里的许多答案之后,我仍然无法理解这个问题。我需要重定向所有请求,如下所示: > > > >(当.htaccess放置在子域文件夹中时) 到目前为止,我一直在使用HTML5样板文件中的代码,将www解析为非www <IfModule mod_rewrite.c> RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^(.*)$ htt
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/ [R=301,L]
</IfModule>
要在单个http请求中重定向到https和非www,可以使用
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
RewriteRule ^ https://%1%{REQUEST_URI} [NE,L,R]
测试此规则之前,请清除浏览器的缓存。有时,根据某些服务器配置,
HTTPS
变量似乎总是设置为off
。这就解释了这个循环,我已经看到了类似的例子
一个简单的解决方法是测试服务器\u端口
(如果使用默认的80和443),或者也可以测试HTTP:X-Forwarded-Proto
示例(1)测试它是否为非https
:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{SERVER_PORT} !403
示例(2)测试它是否为非https
:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{SERVER_PORT} !403
尝试过了,但在清理缓存和硬加载之后,我仍然在Chrome中得到“ERR_TOO_MANY_REDIRECTS”。我理解正确,但在那之后,它正在加载并抛出错误。您是否使用cloud flare?不,我没有使用CF或任何其他CDN。我刚刚安装了Let's Encrypt certificate并想使用它(如果我直接转到https:page或使用www.domain,它可以正常工作)谢谢Justin,示例1在所有主机上都能完美工作,示例2的行为与其他主机相同,在一个主机上有太多重定向SSO,示例2工作,示例1不工作。很高兴有所有可能的解决方案!