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

Перенаправить все поддомены в подпапки

Я хочу добавить правило, чтобы все поддомены перенаправлялись в подпапку. Например:

app1.example.com -> example.com/app1
app2.example.com -> example.com/app2
something.example.com -> example.com/something

Все поддомены будут только на один уровень.

Вопросы

Какие поставщики DNS позволяют мне это делать?

Все грамотные. Это даже не обязательно должно быть специально для DNS, большинство хороших хостов тоже помогут вам в этом. Есть два этапа:

  1. Добавлена ​​запись DNS для *.example.com
  2. Веб-сервер хоста (например, Apache) настроен для ответа на *.example.com направив его на example.comс VirtualHost.

Затем в конце вы добавляете .htaccess запись, которая использует RewriteRule чтобы поймать каждый поддомен и перенаправить его в папку с помощью HTTP_HOST переменная.

Не проверено, но примерно так:

RewriteEngine on
RewriteCond   %{HTTP_HOST}                 ^[^.]+\.example\.com$
RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
RewriteRule   ^([^.]+)\.example\.com(.*)   http://example.com/$1/$2

Предположим, что пользователь запрашивает app1.example.com/bob.

Строка 2

Это поймает app1.example.com в HTTP_HOST - он будет соответствовать RewriteCond.

Строка 3

Обычно Apache передает только /bob быть проверенным против RewriteRule. Чтобы использовать поддомен, мы используем Цепочка заставляя следующее правило соответствовать

${HTTP_HOST}$1
|           ^ /bob
^ app1.example.com

Строка 4

Финал RewriteRule теперь соответствует app1.example.com/bob и не просто /bob. В результате он может иметь «полное» регулярное выражение, соответствующее как этому поддомену, так и пути, и выполнять желаемое перенаправление.

Если вам не нужна эта функция, вы можете упростить правила.


Возможны ли эти альтернативы? Перенаправьте их все в специальное веб-приложение со статическим IP-адресом, которое перенаправляет в нужную подпапку. Как я могу узнать, с какого поддомена они пришли?

Нет надежного способа сделать это. Вы мог попробуйте HTTP Referer, но это не так всегда отправляется всеми браузерами, некоторые брандмауэры удаляют заголовок и т. д.

Программно создавайте каждое правило, когда оно мне нужно. Какие поставщики DNS имеют доступ к API для добавления правил? Думаю, здесь ответом может стать Amazon Route 53.

Это фактически привело бы к более сложный решение вышеуказанного, поэтому я бы не рекомендовал его. Это также приведет к задержке: кеши DNS необходимо обновить, и некоторые посетители не смогут сразу использовать субдомен, пока они этого не сделают. По крайней мере, с моим предложением выше, они смогут начать работу немедленно.