Задать вопрос
@brar

Несколько виртуальных хостов apache 2.4 и редирект c www на без www?

Допустим есть два сайта: a.s и b.s.
Содержат только простейший файл index.html. Файлы конфигурации виртуальных хостов a.conf и b.conf:
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName a.s
        DocumentRoot /var/www/a
</VirtualHost>

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName b.s
        DocumentRoot /var/www/b
</VirtualHost>

Также, есть дефолтный виртуальный хост z.s, с конфигцрационным файлом 000-default.conf.
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName z.s 
        DocumentRoot /var/www/html
</VirtualHost>

/etc/apache2/apache2.conf
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

Сайты открываются в браузере по своим именам. Все окей.
Теперь для каждаого сайта необходимо сделать 301 редирект:
www.a.s => a.s
www.b.s => b.s
Добавил в корень дефолтного сайта (z.s) файл .htaccess c содержимым).
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
.
Всё редиректится, всё отлично, в общем.
Если же создать свой файл .htaccess для каждого сайта, с более конкретным условием, например для сайта a.s делаю вот так:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.a.s$ [NC]
RewriteRule ^(.*)$ http://a.s/$1 [R=permanent,L].

и так для каждого сайта с соответствующими изменениями,
то открывается контент дефолтного сайта и без редиректа.
Таким образом, в моем случае, htaccess работает только если его разместить в дефолтном сайте.
Подскажите, какие настройки поправить, чтобы htaccess был у каждого сайта свой?
Ведь, например, когда имеем разные cms и у каждой свой htaccess, каким образом делать свой редирект для каждого сайта?
Создавать пустой дефолтный хост 000-default со своим htaccess? или что?
  • Вопрос задан
  • 3252 просмотра
Подписаться 2 Оценить 18 комментариев
Решения вопроса 1
gohdan
@gohdan
Системный администратор
У вас в настройках вхостов написано: "ServerName a.s", поэтому когда пользователь приходит на a.s, сервер знает, что это вхост a.s, а когда пользователь приходит на www.a.s, сервер уже такого вхоста не находит, доменное имя ведь отличается, поэтому показывает дефолтный вхост. Просто добавьте в конфиги вхостов ServerAlias:

ServerAdmin webmaster@localhost
ServerName a.s
ServerAlias www.a.s
DocumentRoot /var/www/a

И можно будет класть .htaccess с рерайтом, специфичным для каждого домена, в его докрут. Пользователь при заходе на www.a.s будет попадать как раз на .htaccess для a.s, и в нём уже можно 301-м редиректом перенаправлять его просто на a.s.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы