htaccess пренаписване с помощта на заместващ знак и множество поддомейни

Искам да внедря 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 sub. Това означава, че винаги се препраща към директория1


person Adamski    schedule 27.07.2012    source източник


Отговори (1)


Правилата си пречат. Тъй като хостът: (.*).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. Що се отнася до пренасочването, това е нещо друго. Тези правила няма да пренасочат браузъра, освен ако няма http:// в целта или R флаг в квадратните скоби.

person Jon Lin    schedule 27.07.2012