2012-02-16 70 views
-1

假设A.com和B.com上的所有请求最终位于同一台服务器上,并且我想使用htaccess来控制请求。使用.htaccess进行域管理

默认WWW内容根是/public_html/,但我想A.com请求转发到/public_html/A/B.com请求应当被转发到/public_html/B/

我想出了这个解决方案:

#/public_html/.htaccess 
# A.com 
RewriteCond %{HTTP_HOST} ^A.com$ 
RewriteCond %{REQUEST_URI} !^/A/ 
RewriteRule (.*) A/$1 [L] 

# B.com 
RewriteCond %{HTTP_HOST} ^B.com$ 
RewriteCond %{REQUEST_URI} !^/B/ 
RewriteRule (.*) B/$1 [L] 

和我我有两个问题:

  1. A.com/A/index.phpA.com/index.php是一样的东西,这不是很酷!我宁愿让用户在使用前者时将其重定向到后者。
  2. A.com/etc重定向到A.com/A/etc/

总体来说,我不希望我的客人在URL中看到/A/(或/B/)反正。任何htaccess解决方案都是受欢迎的。

+0

有你'a.com'&'b.com'建立不同的虚拟主机? – ThinkingMonkey 2012-02-16 08:01:28

+0

@ThinkingMonkey:不,我的托管计划不允许我这样做。 – SeMeKh 2012-02-16 08:10:14

回答

1

您可以使用此代码:

Options +FollowSymLinks -MultiViews 
RewriteEngine on 
RewriteBase/

# for external redirection of A.com/A/foo to A.com/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/*(A|B)(?:/(.*)|)\s [NC] 
RewriteRule^http://%1.com/%2 [R=301,L,NC] 

# for internal redirection of A.com/foo to A.com/A/foo 
RewriteCond %{HTTP_HOST} ^(A|B)\.com$ [NC] 
RewriteRule (?!^(A|B)(?:/(.*)|)$)^.*$ %1%{REQUEST_URI} [L] 
+0

太多重定向 – SeMeKh 2012-02-16 15:49:02

+0

请编辑回答。我之前犯了一个错误。 – anubhava 2012-02-16 16:02:48

1

此以相同的顺序添加到您的.htaccess

Options +FollowSymLinks -MultiViews -Indexes 
RewriteEngine on 
RewriteBase/

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

RewriteRule ^(A|B)(?:/(.*))?$ http://%{HTTP_HOST}/$2 [NC,L,R=301] 

#/public_html/.htaccess 
# A.com or B.com 
RewriteCond %{HTTP_HOST} ^(A|B).com$ [NC] 
RewriteRule (.*) %1/$1 [L] 

如果你不希望这样当A.com/B/访问A被重定向到A做。或者如果您不希望B被重定向到B,那么在访问像这样的B.com/A/时。你可以抛出一个404错误。

RewriteCond %{HTTP_HOST} ^A.com$ [NC] 
RewriteCond %{REQUEST_URI} ^/B(?:/(.*))? [NC] 
RewriteRule^- [L,R=404] 

RewriteCond %{HTTP_HOST} ^B.com$ [NC] 
RewriteCond %{REQUEST_URI} ^/A(?:/(.*))? [NC] 
RewriteRule^- [L,R=404] 

RewriteRule ^(A|B)(?:/(.*...RewriteRule^- [L]之后添加上述行。

+0

哎呀!现在'A.com/etc'被重定向到'A.com/A/etc /',因此得到了403! – SeMeKh 2012-02-16 13:29:05

+0

@SeMeKh'403'是由于'F'标志。不是因为'A.com/etc'被重定向到'A.com/A/etc /'。有意完成。现在已经改变为现在重定向。 – ThinkingMonkey 2012-02-16 14:03:47

+0

似乎这不是一个有效的htaccess文件,我得到内部服务器错误。另外,由于尾随斜线,'A.com/etc'会重定向到'A.com/A/etc /'。 – SeMeKh 2012-02-16 15:47:17