Mod rewrite htaccess重定向到www,不包括https和http子域

Mod rewrite htaccess重定向到www,不包括https和http子域,mod-rewrite,Mod Rewrite,这就是我目前所拥有的,我正在尝试重定向到,但是如果它是一个子域,那么它将保持不变,并且基于https/http有条件 目前有 RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 这并不难,虽然有点乏味。还有另一个重写条件变量称为HTTPS,即使您没有运行mod_ssl,也可以安全地使用它。然后,您将链接两个重写秒检查,并得到如下结果: RewriteCond %{H

这就是我目前所拥有的,我正在尝试重定向到,但是如果它是一个子域,那么它将保持不变,并且基于https/http有条件

目前有

RewriteCond %{HTTP_HOST} !^www\.

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

这并不难,虽然有点乏味。还有另一个重写条件变量称为HTTPS,即使您没有运行mod_ssl,也可以安全地使用它。然后,您将链接两个重写秒检查,并得到如下结果:

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中。我不知道有什么方法可以让它在不硬编码域的情况下工作。

试试这个规则:

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

这只会将请求重定向到主机example.com,并保留HTTPS(如果已使用)。

我很好奇。。。你能解释一下
^on(s)
吗?@peopless:HTTPS的值是
。所以
%{HTTPS}s
要么是
ons
要么是
offs
。如果是
ons
,则模式
^on(s)
匹配,第一组的匹配为
s
。否则,如果它是
offs
,则取空分支,并且第一组的匹配项为空。哦,太酷了。我没有注意到
%{HTTPS}s
末尾的
s
,这很有意义。谢谢