У меня есть веб-сайт (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 к одному из доменов, который не работает, это помогло бы.