htaccess的重定向到www排除子域HTTPS和HTTP

问题描述:

因此,这是目前我有,我想重定向到http://something.comhttp://www.something.com如果它的一个子做这样的事情,所以http://other.somethings.com将保持不变,有条件的基础上HTTPS/HTTPhtaccess的重定向到www排除子域HTTPS和HTTP

目前有..

RewriteCond %{HTTP_HOST} !^www\. 

RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

试试这个规则:

RewriteCond %{HTTP_HOST} =example.com 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

如果它使用这只会将请求重定向到主机example.com并保持HTTPS。

+0

我很好奇......你能解释一下'^(s)|'吗? – eyelidlessness 2010-05-26 00:14:34

+0

@eyelidlessness:* HTTPS *的值是“on”或“off”。所以'%{HTTPS} s'可以是'ons'或'offs'。如果它是'ons',模式'^ on(s)|'匹配,并且第一组的匹配是's'。否则,如果它处于“off”状态,则取空分支,第一组的匹配为空。 – Gumbo 2010-05-26 07:06:44

+0

哦,很酷。我没有注意到'%{HTTPS} s'末尾的's',这很有道理。谢谢! – eyelidlessness 2010-05-26 18:57:56

这并不难,虽然这是一个有点乏味。还有一个名为HTTPS的重写条件变量,即使在没有运行mod_ssl的情况下也是安全的。然后你会链中的两个的RewriteCond检查,并获得这样的:

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

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

的缺点是,你现在硬编码有问题的领域进入的.htaccess。我不知道有什么方法可以在不对域进行硬编码的情况下工作。

+0

如果它的http://something.domain.com需要保持这种方式怎么办 – wesside 2010-05-25 20:01:15

+0

啊,我的错误...我会编辑答案! – ivans 2010-05-25 20:17:03