因此,我在主域名“domain.com”上从 cPanel 创建了几个子域名,如“sub1.domain.com”和“sub2.domain.com”。它们在服务器上的实际位置是“domain.com/sub1”和“domain.com/sub2”。
现在,我想使用 .htaccess 将非 www 重定向到 www,这是我目前所做的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [L,R=301]
</IfModule>
这有效。当有人输入 domain.com 时,它将被重定向到 www.domain.com。但是当有人输入 sub1.domain.com 时,他将被重定向到 www.domain.com/sub1 - 我不想要这样,它需要在 sub1.domain.com 中。
我应该在 .htaccess 文件中添加什么来实现这一点?
答案1
您可以像这样单独排除每一个sub1
;sub2
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^sub1\.domain\.com [NC]
RewriteRule ^(.*) - [L]
RewriteCond %{HTTP_HOST} ^sub2\.domain\.com [NC]
RewriteRule ^(.*) - [L]
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [L,R=301]
</IfModule>
或者只是具体说明你只想重定向domain.com
到www.domain.com
RewriteCond
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [L,R=301]
</IfModule>
答案2
RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这适用于所有域,不包括任何子域。玩得开心。