如何在不更改sub.domain.com的情况下更改htaccess以将domain.com转换为www.domain.com?

时间:2011-11-13 06:55:54

标签: .htaccess

你的.htaccess应该如何将domain.com重定向到www.domain.com,但保持sub.domain.com不变?

下面

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

将domain.com转换为www.domain.com,但也将sub.domain.com转换为www.domain.com/subdomains/sub(其中包含的内容)。我希望sub.domain.com保留在浏览器窗口中,同时显示www.domain.com/subdomains/sub的内容(照例)。

1 个答案:

答案 0 :(得分:0)

您的规则正在针对不是www.domain.com的每个域运行而是您希望在HTTP_HOST为`domain.com'时运行,您可以这样做:

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

在正则表达式中,^表示字符串的开头,$表示字符串的结尾,而开头的!表示匹配不是以下内容的所有内容。这将会捕获所有不完全是www.domain.com的域名。在我的示例中,我仅匹配完全domain.com的域并将其重定向到www.domain.com

我通常在我的vhost文件中这样做。

<VirtualHost myip:80>
    ServerName domain.com
    Redirect permanent / http://www.domain.com/
    CustomLog logs/domain.com/access_log combined
    ErrorLog logs/domin.com/error_log
</VirtualHost>
<VirtualHost myid:80>
    DocumentRoot /var/www/domain.com
    ServerName www.domain.com
    ServerAdmin webmaster@domain.com
    CustomLog logs/domain.com/access_log combined
    ErrorLog logs/domain.com/error_log

    <Directory "/var/www/domain.com">
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>