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

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

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

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

Вопросы

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

1 ответ

Решение

Какие DNS-провайдеры позволяют мне это делать?

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

  1. Добавлена ​​запись DNS для *.example.com
  2. Веб-сервер хоста (например, Apache) настроен для ответа на *.example.com направляя его к example.com"s 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-кэши должны будут обновиться, и некоторые посетители не смогут использовать субдомен немедленно, пока не сделают это. По крайней мере, с моим предложением выше, они могли бы начать немедленно.

Другие вопросы по тегам