htaccess 重定向非 www http 和 https
Posted
技术标签:
【中文标题】htaccess 重定向非 www http 和 https【英文标题】:htaccess redirect for non-www both http and https 【发布时间】:2011-01-02 04:15:19 【问题描述】:我想要:
http://example.com
重定向到:http://www.example.com
https://example.com
重定向到:https://www.example.com
并且任何 http://whatever.example.com
都不要像 http://www.whatever.example.com
这样附加 www。
【问题讨论】:
【参考方案1】:试试这个规则:
RewriteCond %HTTP_HOST ^[^.]+\.[^.]+$
RewriteCond %HTTPSs ^on(s)|
RewriteRule ^ http%1://www.%HTTP_HOST%REQUEST_URI [L,R=301]
这里有一个解释:
-
第一个条件测试 HTTP 标头字段 Host 是否具有所需的格式(恰好包含一个句点)。
第二个条件测试 HTTPS 变量的值(值
on
和 off
)和 s
(所以是 ons
或 offs
)的连接值等于ons
并捕获s
。这意味着如果 %HTTPSs
计算结果为 ons
,则第一个匹配组为 s
,否则为空。
该规则将匹配所有请求,因为每个字符串都有一个开头(标有^
),如果两个条件都为真,则将它们重定向到http%1://www.%HTTP_HOST%REQUEST_URI
的评估值。其中%1
是前一个条件的第一个匹配组(s
如果 HTTPS,否则为空),%HTTP_HOST
是请求的 HTTP Host,%REQUEST_URI
是绝对 URL 路径这是请求的。
【讨论】:
你也能解释一下吗?这对我来说有点中文......第一行是为了只捕获两部分主机(如:example.com)。第二行是做什么的,如何做的? 看起来不错,但正在为我生成 500 条内部错误消息。 在某些主机上,您需要将第二行替换为RewriteCond %HTTP:X-Forwarded-SSLs ^on(s)|
以进行正确的 SSL 检测。【参考方案2】:
尝试将此RewriteCond
添加到您的 .htaccess 文件中以仅捕获 SSL - 然后对标准 http 执行相同的操作。
RewriteCond %HTTPS on
【讨论】:
以上是关于htaccess 重定向非 www http 和 https的主要内容,如果未能解决你的问题,请参考以下文章
通过 htaccess 将所有 http 和 https 非 www URL 重定向到 https://www.xyz.com
Htaccess 301将规则/ HTTP重定向到HTTPS /非www到www