mod_rewrite для определенных доменов в файле сопоставлений - PullRequest
0 голосов
/ 30 декабря 2010

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

# this is what I currently have
RewriteEngine On
RewriteCond %{HTTP_HOST} ^.*\.?foo\.com$ [NC]
RewriteRule ^.*$ ${domainmappings:www.foo.com} [L,R=301]

# rewrite map file
www.foo.com www.domain.com/domain/foo.com.php
www.bar.com www.domain.com/domain/bar.com.php
www.baz.com www.domain.com/other/baz.php.foo

Проблема в том, что я не хочу, чтобы каждый домен был частью RewriteCond. Я пытался

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

но это будет делать для КАЖДОГО домена. Я хочу, чтобы домены, которые находятся в файле сопоставлений, перенаправляли, а затем переходили к другим перезаписям, если они не соответствуют ни одному домену в файле сопоставлений.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2010

Я близок к тому, чтобы выяснить соответствие регистра, но не могу определить префикс www. Если я использую первый ниже, он работает без www. Если я использую второй, он работает с www. Если я использую ОБА - ни то, ни другое.

RewriteCond %{HTTP_HOST} (.*)$ [NC] # works for without www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] # works with www
RewriteCond ${domainmappings:%1|NOTFOUND} ^(.+)$ [NC]
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ ${domainmappings:%1} [L,R=301]

Есть идеи?

0 голосов
/ 30 декабря 2010

Вы на правильном пути.То, что вам нужно сделать, это использовать оператор трубы на карте, чтобы у вас было всеохватывающее.

RewriteCond ${domainmappings:%{HTTP_HOST}|NOTFOUND}    ^(.+)$
RewriteCond %1  !^NOTFOUND$
RewriteRule ^.*$ ${domainmappings:%1} [L,R=301]

Второе условие не будет соответствовать, если хост отсутствует в списке.Вам все еще приходится иметь дело с префиксом www и соответствием регистра, но вы поняли идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...