.htaccess规则包含子域和两个域

时间:2009-10-09 17:17:18

标签: regex .htaccess subdomain

我有一个域domain.com,我将其用作主域名。我还拥有第二个域domain2.com,我自动转到domain.com

这是通过.htaccess:

完成的
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule (.*) http://www.domain.com/$1 [L,R=301]

我想设置一个子域sub.domain.com但是当前.htaccess,访问sub.domain.com会将我发送到www.domain.com/sub

我找到this问题,这解决了这个问题,但却否定了我domain2.com指向domain.com的第一期问题

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

我正在寻找一种方法来结合这两条规则:

www.domain.com => www.domain.com
domain.com => www.domain.com
domain2.com => www.domain.com
sub.domain.com => sub.domain.com

4 个答案:

答案 0 :(得分:1)

您需要收紧RewriteConds,以便它们只匹配您想要匹配和更改的特定主机名,例如'^ domain \ .com $'和'^(www \。)?domain2 \ .com $ ”。目前他们都会匹配任何东西,所以他们会干涉。

但是你必须在.htaccess中这样做吗?在主站点配置中使用简单的重定向更简洁:

<VirtualHost *:80>
    ServerName www.domain.com
    ...your real config...
</VirtualHost>

<VirtualHost *:80>
    ServerName www.domain2.com
    ServerAlias domain2.com
    ServerAlias domain.com
    ServerAlias sub.domain.com
    Redirect permanent http://www.domain.com/
</VirtualHost>

还会从应用程序的Web根目录中获取令人讨厌的特定于部署的内容。

(我无法确定你是否真的希望子域名转到另一个文件夹;如果你这样做,请删除上面的sub.domain.com行并将其放入自己的VirtualHost中:)

<VirtualHost *:80>
    ServerName sub.domain.com
    Redirect permanent http://domain.com/sub/
</VirtualHost>

答案 1 :(得分:1)

尝试此规则:

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

答案 2 :(得分:1)

这是否会起作用:

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

答案 3 :(得分:1)

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

应该解决你的问题:D