我想使用单个域在单个虚拟主机上实现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]
这有三个问题:
1)在浏览器地址栏中更改了网址,以便用户可以看到新网址。
我希望用户看到原始类型的URL
显示:
http:\\subdomain1.cert.com\directory2
而不是:
http:\\subdomain1.cert.com
2) TEST和CERT Rewrite的Internal Server Error
。
当我替换固定子域的通配符
3) PROD RweriteCond始终有效(也适用于CERT和TEST子。这意味着它始终转发到directory1
答案 0 :(得分:1)
这些规则互相干扰。因为主机:(.*).domain.com
也匹配cert和测试主机。您需要在“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
标记,否则这些规则不会重定向浏览器。