0

我想使用单个域在单个虚拟主机上实现 TEST、CERT 和 PROD 网页。这些网站对第一个子域使用通配符。

我有以下代码:

# 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) TEST 和 CERT 重写具有Internal Server Error.
当我替换固定子域的通配符时它工作正常

3) PROD RweriteCond 总是有效的(对于 CERT 和 TEST 子也是如此。这意味着它总是被转发到 directory1

4

1 回答 1

1

规则互相干扰。因为 host:(.*).domain.com也匹配 cert 和 test 主机。您需要在“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。http://至于被重定向,那是另外一回事,除非目标中有一个或R方括号中有一个标志,否则这些规则不会重定向浏览器。

于 2012-07-27T19:08:58.613 回答