Назад | Перейти на главную страницу

mod_rewrite точное совпадение имени хоста с несколькими условиями

У меня есть набор требований для mod_rewrite, который ломает мне голову. Любые подсказки / указатели будут оценены:

домены:

www.domain-europe.com
www.domain.com
  1. запросы для www.domain-europe.com должны быть перенаправлены на www.domain.com/europe
  2. запросы для www.domain-europe.com/someurl должны быть перенаправлены на www.domain.com/someurl
  3. любой другой запрос, поступающий на сервер, который не является www.domain-europe.com или www.domain.com, должен быть установлен на www.domain.com

Я могу заставить работать любые 1 и 3 или 2 и 3 из них, но не все три одновременно.

Вот одна из многих итераций, которые я пробовал:

RewriteEngine on

RewriteCond %{HTTP_HOST}    ^www\.domain-europe\.com$ [NC]
RewriteRule (.*) http://www.domain.com/europe [R=301,L]

RewriteCond %{HTTP_HOST}    ^www\.domain-europe\.com/ [NC]
RewriteRule (.*) http://www.domain.com$1 [R=301,L]

RewriteCond %{HTTP_HOST}   !^www\.domain\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www.domain.com/$1 [L,R]

Ваши условия перезаписи совпадают только на хосте HTTP, а не на uri запроса - и ваше правило перезаписи (. *) Соответствует всему ...

RewriteCond %{HTTP_HOST}    ^www\.domain-europe\.com$ [NC]
RewriteRule (.*) http://www.domain.com/europe [R=301,L]

будет соответствовать в любое время, когда хост будет www.domain-europe.com, независимо от того, запрашивается ли / или запрашивается /foo/bar/virus.exe.

Вместо этого, возможно, попробуйте что-нибудь вроде:

RewriteCond %{HTTP_HOST} ^(www\.)?domain-europe\.com$ [NC]
RewriteRule ^/$ http://www.domain.com/europe [R=301,L]
RewriteRule ^/(.+)$ http://www.domain.com$1 [R=301,L]

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^/(.*) http://www.domain.com/$1 [L,R]

Возможно, вам все равно придется его немного подправить. Я немного забыл о точной семантике, но это должно, по крайней мере, указать вам правильное направление.

HTH