2012-07-27 107 views
0

我想在單個域名上使用單個域名實現TEST,CERT和PROD網頁。 網站對第一個子域使用通配符。htaccess使用通配符和多個子域名重寫

我有以下代碼:

# for TEST 
RewriteCond %{HTTP_HOST} (.*).test.domain.com 
RewriteCond %{REQUEST_URI} !^/directory3 
RewriteRule ^(.*)$ /directory3/$1 [L] 

# for CERT 
RewriteCond %{HTTP_HOST} (.*).cert.domain.com 
RewriteCond %{REQUEST_URI} !^/directory2 
RewriteRule ^(.*)$ /directory2/$1 [L] 

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

這有3個問題:
1) URL在瀏覽器地址欄中更改,因此用戶可以看到新的URL。 我想用戶看到原始類型URL
顯示:

http:\\subdomain1.cert.com\directory2 

代替:

http:\\subdomain1.cert.com 

2)測試和CERT重寫由具有Internal Server Error
當我更換通配符的固定子域

3)它工作正常督促RweriteCond總是有效(也爲CERT和測試子,這意味着它總是轉移到directory1

回答

1

這些規則是相互interferring因爲主機:。(.*).domain.com也匹配的證書和測試主機您需要排除它們在你的「PROD」規則:

RewriteCond %{HTTP_HOST} !test.domain.com 
RewriteCond %{HTTP_HOST} !cert.domain.com 
RewriteCond %{HTTP_HOST} (.*).domain.com 
RewriteCond %{REQUEST_URI} !^/directory1 
RewriteRule ^(.*)$ /directory1/$1 [L] 

這解決了#2,#3作爲。重新定向,這是一些事情ng else,除非目標中有http://或方括號中的R標誌,否則這些規則不會重定向瀏覽器。