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

Перенаправьте все субдомены без www на основной домен www с помощью Apache2

У меня есть веб-сайт (domain.com), и я хотел бы перенаправить все свои дополнительные домены (domain2.com, domain3.com) и все поддомены этих доменов (* .domain.com, * .domain2.com ... ) в основной домен www.domain.com (потому что я хочу, чтобы последний был единственным URL-адресом для получения доступа к сайту).

Для этого Я создал виртуальный хост Apache, чтобы уловить все эти возможности и перенаправить их (само собой разумеется, после настройки моего DNS). Я поместил эту конфигурацию в файл с именем «999-catchall» в папке «sites-enabled» Apache. NB: я использую это имя, чтобы быть уверенным, что это будет последний проверенный vhost, потому что у меня также есть мой vhost по умолчанию (000-default для www.domain.com) и vhost для моей веб-почты (001-webmail для webmail.domain .com).

Вот содержание этого "999-кратного" файла:

<VirtualHost *:80>
        # catch...
        ServerName domain.com
        ServerAlias domain2.com domain3.com *.domain.com *.domain2.com *.domain3.com
        # ...and redirect
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
        RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]
</VirtualHost>

Эта конфигурация работает для domain.com, domain2.com, * .domain2.com, domain3.com и * .domain3.com но не для * .domain.com. Пример: если я ввожу blabla.domain2.com, я перенаправляюсь на www.domain.com, но если я набираю blaba.domain.com, меня нет (у меня просто возникает ошибка «Сервер не найден»).

Мой метод верен? Вы видите, в чем моя ошибка?

РЕДАКТИРОВАТЬ: Моя ошибка, мой DNS-сервер не был правильно настроен для * .domain.com. Итак, эта конфигурация работает, если она может помочь тому, кто хотел бы сделать то же самое.

Я не эксперт по Apache, но подумал об изменении:

ServerName www.domain.com
ServerAlias domain.com domain2.com domain3.com *.domain.com *.domain2.com *.domain3.com

edit: при перечитывании OP, похоже, вы уже настраиваете www.domain.com в другом файле, что, я считаю, не разрешено. Однако это может быть частью проблемы. Если я правильно слежу за вами, ответ www.domain.com взят из этого файла, а не из конфигурации, размещенной здесь.

NB: я использую это имя, чтобы быть уверенным, что это будет последний проверенный vhost, потому что у меня также есть мой vhost по умолчанию (000-default для www.domain.com) и vhost для моей веб-почты (001-webmail для webmail.domain .com).

Файлы конфигурации Vhost проверяются в алфавитном порядке, начиная с 0, и первый из них будет действовать как общий.

Из Apache (с 1.3 по 2.2) Документация:

Первый виртуальный хост в этом списке (первый виртуальный хост в файле конфигурации с указанным IP-адресом) имеет наивысший приоритет и перехватывает любой запрос на неизвестное имя сервера или запрос без поля заголовка Host :.

Другой вариант - использовать _default_:80 виртуальный хост. Видеть С помощью _default_ vhosts

Я не знаю, есть ли у вас на машине виртуальные хосты, но попробуйте проверить, что blaba.domain.com еще не определен где-то еще в вашей конфигурации.

Я бы написал RewriteRule как

RewriteRule ^(/.*)$ http://www.domain.com$1 [R=301,L]

чтобы убедиться, что я не добавляю случайный мусор в домен .com

а затем включите RewriteLogLevel 3 и RewriteLog и проверил сгенерированный файл на предмет других ошибок.

Если бы вы могли прикрепить вывод wget к одному из доменов, который не работает, это помогло бы.