.htaccess 为什么我的htaccess不支持www和https';不行?

.htaccess 为什么我的htaccess不支持www和https';不行?,.htaccess,https,no-www,.htaccess,Https,No Www,我的.htaccess文件有问题。我想将no www重定向到www,将HTTP重定向到HTTPS 我试过这些文件,但不起作用 RewriteEngine On RewriteCond %{HTTP_HOST} ^www.example.com$ RewriteRule ^(.*) http://www.example.com/$1 [QSA,L,R=301] RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUE

我的
.htaccess
文件有问题。我想将no www重定向到www,将HTTP重定向到HTTPS

我试过这些文件,但不起作用

RewriteEngine On  
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^(.*) http://www.example.com/$1 [QSA,L,R=301]

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,R=301,L]


您能帮助我吗?

最初的问题是服务器配置中未启用
.htaccess
文件。在服务器配置中设置
AllowOverride All
以启用
.htaccess
文件后,这导致重定向循环

您得到一个重定向循环,因为请求HTTPS时,
HTTPS
服务器变量报告“关闭”。这意味着您有一个处理SSL连接的前端代理,这可以通过以下事实得到证实:
X-Forwarded-Proto
HTTP请求头(您的应用程序服务器正在看到的)设置为“https”。(当请求通过时,
X-Forwarded-Proto
头由代理服务器设置。)

这意味着此代理和应用程序服务器之间的“私有”连接是通过普通HTTP进行的。但是代理和客户端之间的连接是由HTTPS保护的。这不一定是个问题,但是,这意味着您需要调整指令以检查
X-Forwarded-Proto
HTTP请求头,而不是
HTTPS
服务器变量

例如:

RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

确保在测试之前清除浏览器缓存。通常最好使用302(临时)重定向进行测试,只有在确定其正常工作时才更改为301(永久),以避免缓存问题。

当您声明它“不工作”时,请确切说明哪些不工作-发生了什么?错误?不良重定向?没有什么?您的第二个规则块应该有效。请确保您已清除浏览器缓存,因为任何早期错误的301重定向都可能已被浏览器缓存。@MrWhite感谢您的回复。什么都没发生。。。如果我不把自己的“s”放在http之后,重定向就不起作用。我已经清理了浏览器(Safari和Chrome)的缓存和Cookie,但还是一样。您的
.htaccess
文件中还有其他指令吗?(如果是这样,请在您的问题中发布您的整个
.htaccess
文件,并附上这些指令。)在apache2.conf文件(/etc/apache2/apache2.conf)中将值更改为“None”后,我得到以下信息:
选项索引下面的ymlinks AllowOverride All需要所有已授予的
但是,当我想访问我的网站时,我收到一条错误消息:ERR_TOO_MANY_重定向我已经清理了缓存和cookie,没有任何更改@MrWhite@MrWhite我看到了:
?https=https
非常感谢@MrWhite的支持!这就是现在的工作!
RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]