2012-02-16 69 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