我对.htaccess文件不太熟悉,而且我正在尝试从已经存在的以下重写规则中排除子域名(类似dev.example.com)
):
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
此规则禁止任何人只需输入example.com
或http://example.com
并强制显示网址http://www.example.com
的所需内容。
我尝试了从这个重写规则中排除子域名的一些选项,但无济于事。该站点上的每个目录都有自己的.htaccess文件,但似乎这个目录仍然优先。有任何想法吗?谢谢!
答案 0 :(得分:14)
现有规则已经排除了子域名。你只需要添加一个新条件:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^dev\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
你也可以摆脱正则表达式:
RewriteEngine On
RewriteCond %{HTTP_HOST} !=www.example.com [NC]
RewriteCond %{HTTP_HOST} !=dev.example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
语法可在http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#rewritecond
找到答案 1 :(得分:3)
我不确定这是否适合您,但最好使用apache virtualhosts配置而不是.htaccess
文件。在这种情况下,对于非www - > www redirect,我通常使用类似的东西:
<VirtualHost *:80>
ServerName example.com
RedirectMatch permanent ^(.*) http://www.example.com$1
</VirtualHost>
这通常比mod_rewrite
规则更安全。
答案 2 :(得分:3)
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(dev|www)\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]