2012-07-27 108 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标志,否则这些规则不会重定向浏览器。