htaccess的重定向非www HTTP和HTTPS
问题描述:
我想有:htaccess的重定向非www HTTP和HTTPS
-
http://example.com
重定向到:http://www.example.com
-
https://example.com
重定向到:https://www.example.com
和任何为http://whatever.example.com
不要像http://www.whatever.example.com
那样追加www。
答
试试这个规则:
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这里有一个解释:
- 第一个条件测试,如果HTTP报头字段主机有要求的格式(只包含一个周期)。如果
- 第二条件测试HTTPS变量的值的连接的值(值
on
和off
)和s
(因此无论ons
或offs
)等于ons
并且捕获s
。这意味着如果%{HTTPS}s
的计算结果为ons
,则第一个匹配组为s
,否则为空。 - 该规则将匹配所有请求,因为每个字符串都有一个开始(标记为
^
),并将它们重定向到评估值http%1://www.%{HTTP_HOST}%{REQUEST_URI}
,如果两个条件都为真。其中%1
是先前条件的第一个匹配组(如果HTTPS为s
,否则为空),%{HTTP_HOST}
是请求的HTTP 主机,%{REQUEST_URI}
是请求的绝对URL路径。
答
尝试将此RewriteCond
添加到您的.htaccess文件中,以仅捕获SSL - 然后为标准http执行相同的操作。
RewriteCond %{HTTPS} on
你能解释一下吗?对我而言,这是一种中国人......第一行是只捕捉两部分的主机(如:example.com)。第二行的功能如何? – 2010-01-06 18:17:22
看起来不错,但正在为我生成500条内部错误消息。 – TRiG 2011-05-12 09:54:51
@TRiG:请参考服务器的错误日志。 – Gumbo 2011-05-12 10:01:10