htaccess重写

时间:2010-08-25 18:26:21

标签: .htaccess mod-rewrite

我们拥有包含各种TLD的域名。

让我们使用example.com作为我们的主要URL,我们将example.biz,example.net,example.org重定向到example.com。

我们在.htaccess文件中有以下内容,并且效果非常好:

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

您注意到任何非www都将被重定向到www。

但是,我们刚刚添加了一个子域:str.example.com,为了使其可访问,我们必须注释掉上述规则。

我希望有人可以帮助我们编写将重定向的规则:

  1. 非www和非str到www
  2. non.com TLD到.com
  3. 有几个案例可以说明我的意思:

    1. example.com - > www.example.com
    2. example.net - > www.example.com
    3. abc.example.com - > www.example.com
    4. str.example.com - > str.example.com
    5. str.example.org - > str.example.com
    6. 非常感谢。

2 个答案:

答案 0 :(得分:3)

这有点复杂,但它可以为您节省额外的重定向:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www|str)\.        [NC,OR]
RewriteCond %{HTTP_HOST} !\.com$              [NC]
RewriteCond %{HTTP_HOST}  (.*?)\.[A-Z]+$      [NC]
RewriteCond %1            ^(([^.]+)\.)?example$
RewriteCond %2            ^(str)              [OR]
RewriteCond www           ^(www)
RewriteRule ^ http://%1.example.com%{REQUEST_URI} [R=301,L]

请注意,它也只是希望您拥有一个TLD,因此example.co.uk在此处不起作用。这不是你的一个例子,所以我没有试图解释它。

答案 1 :(得分:1)

请尝试以下规则:

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