Как динамически перенаправить основанные на www URL-адреса на не-www-адреса с несколькими доменами в одном VirtualHost - PullRequest
8 голосов
/ 09 февраля 2009

У меня есть VirtualHost, который выглядит примерно так:

<VirtualHost *:80>

  ServerName  domain1.com
  ServerAlias www.domain1.com domain2.com www.domain2.com

</VirtualHost>

Когда кто-то посещает www.domain1.com/test, его следует перенаправить на:

domain1.com/test

Когда кто-то посещает www.domain2.com/test, его следует перенаправить на:

domain2.com/test

Мои текущие RewriteRules отсутствуют.

Редактировать: Вот что у меня так далеко:

# Rewrite www to non-www
RewriteEngine on
RewriteCond %{HTTP_HOST} www\.%{HTTP_HOST}$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]

Очевидно, что это создает бесконечный цикл перенаправления.

Ответы [ 3 ]

10 голосов
/ 09 февраля 2009

Нет необходимости переписывать.

<VirtualHost *:80>
    ServerName domain1.com
    ServerAlias domain2.com
    ... real vhost settings ...
</VirtualHost>

<VirtualHost *:80>
    ServerName www.domain1.com
    Redirect permanent / http://domain1.com/
</VirtualHost>
<VirtualHost *:80>
    ServerName www.domain2.com
    Redirect permanent / http://domain2.com/
</VirtualHost>
6 голосов
/ 10 февраля 2009

Ваш RewriteCond немного шаткий. Я удивлен, что он вообще что-то делает, так как он, похоже, пытается сопоставить хост www.domain1.com с шаблоном www\.www.domain1.com. Эти директивы работали для меня:

# Redirect www to non-www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1$1 [L,R=301]
0 голосов
/ 09 февраля 2009

Вы можете иметь несколько VirtualHosts в файле конфигурации, поэтому вы должны изменить свою конфигурацию следующим образом:

<VirtualHost *:80>
    ServerName domain1.com
    ServerAlias www.domain1.com
</VirtualHost>

<VirtualHost *:80>
    ServerName domain2.com
    ServerAlias www.domain2.com
</VirtualHost>

Вы можете добавить еще один VirtualHost для каждого домена, который вы хотите сделать.

...