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] 

这里有一个解释:

  1. 第一个条件测试,如果HTTP报头字段主机有要求的格式(只包含一个周期)。如果
  2. 第二条件测试HTTPS变量的值的连接的值(值onoff)和s(因此无论onsoffs)等于ons并且捕获s。这意味着如果%{HTTPS}s的计算结果为ons,则第一个匹配组为s,否则为空。
  3. 该规则将匹配所有请求,因为每个字符串都有一个开始(标记为^),并将它们重定向到评估值http%1://www.%{HTTP_HOST}%{REQUEST_URI},如果两个条件都为真。其中%1是先前条件的第一个匹配组(如果HTTPS为s,否则为空),%{HTTP_HOST}是请求的HTTP 主机%{REQUEST_URI}是请求的绝对URL路径。
+0

你能解释一下吗?对我而言,这是一种中国人......第一行是只捕捉两部分的主机(如:example.com)。第二行的功能如何? – 2010-01-06 18:17:22

+0

看起来不错,但正在为我生成500条内部错误消息。 – TRiG 2011-05-12 09:54:51

+0

@TRiG:请参考服务器的错误日志。 – Gumbo 2011-05-12 10:01:10

尝试将此RewriteCond添加到您的.htaccess文件中,以仅捕获SSL - 然后为标准http执行相同的操作。

RewriteCond %{HTTPS} on