首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的no-www和https的htaccess不能工作?

为什么我的no-www和https的htaccess不能工作?
EN

Stack Overflow用户
提问于 2019-01-24 09:52:45
回答 1查看 117关注 0票数 1

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

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

代码语言:javascript
运行
复制
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]

代码语言:javascript
运行
复制
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] 

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

你能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-26 07:47:55

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

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

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

例如:

代码语言:javascript
运行
复制
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 (永久)-以避免缓存问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54338311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档