你的.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的内容(照例)。
答案 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>