2012-02-25 127 views
0

我希望写在.htaccess规则重定向子域名重定向

http://www.dir.domain.com 
http://dir.domain.com 
http://www.domain.com/dir 

这些应该重定向到提前

http://domain.com/dir 

谢谢...

+0

你现在有一个'* .domain.com'的catchall重定向到你的DOCROOT的'domain.com'吗?你有什么类型的服务? VPS或共享服务,如果后者是cPanel或webadmin启用。你所问的是可行的,但答案因你告诉我们的情况而异。 – TerryE 2012-02-25 17:37:31

+0

我在共享服务中有一个域和一个子域。这里即时谈论我的子域。 – HDTV 2012-02-25 18:13:54

回答

0

这里的技巧是使用.htaccess file DOCROOT

RewriteEngine on 
RewriteBase /

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

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ 
RewriteRule ^dir/.*   http://domain.com/$0   [R=301,L] 

请注意,这是301重定向 - 即服务器告诉浏览器,这是一个永久重定向,浏览器会缓存此重定向。

您也可以通过调整标志在内部重定向,在服务器端以静默方式完成此映射。

这是假设您的共享服务使用Apache,如果使用的是IIS的,那么你需要做的web.config中类似

+0

它不重定向... – HDTV 2012-02-25 18:42:02

+0

> RewriteCond%{HTTP_HOST}^www.dir.domain.com [NC] > RewriteRule ^(。*)$ http://domain.com/dir/$1 [L,R = 301] > RewriteCond%{HTTP_HOST}^dir.domain.com [NC] > RewriteRule ^(。*)$ http://domain.com/dir/$1 [L,R = 301]> RewriteCond%{ HTTP_HOST}^dir.domain.com [NC] > RewriteRule ^(。*)$ http://domain.com/dir/$1 [L,R = 301]>如果我将此代码添加到/dir/.htaccess那么它会将[http://dir.domain.com] > [http://www.domain.com/dir]重定向到[http://domain.com/dir]>,但它不会重定向[ http://www.dir.domain.com] @TerryE – HDTV 2012-02-25 19:04:54

+0

@HDTV,注意Cond1的调整 - 也编辑你的Q来添加这样的信息。 – TerryE 2012-02-25 19:14:54

0

你可以试试:

RewriteCond %{HTTP_HOST} ^((?!www).+)\.domain\.com$ 
RewriteRule^http://domain.com/%1 [L,NE] 

请在您的域中更改域,当您输入sub1.domain.com时,它将重定向到domain.com/sub1,当您输入sub2.domain.com时,它将重定向到domain.com/sub2 ....

+0

请给出详细的答案 – 2016-05-07 13:14:48