Какие поставщики DNS позволяют мне это делать?
Все грамотные. Это даже не обязательно должно быть специально для DNS, большинство хороших хостов тоже помогут вам в этом. Есть два этапа:
*. Example.com
*. 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
.
Это перехватит app1.example.com
в HTTP_HOST
- он будет соответствовать RewriteCond
.
Обычно Apache передает только / bob
для проверки на соответствие RewriteRule
. Чтобы использовать поддомен, мы используем Chaining , заставляя следующее правило соответствовать
${HTTP_HOST}$1
| ^ /bob
^ app1.example.com
Последнее RewriteRule
теперь соответствует app1.example.com / bob
и , а не , а только / bob
. В результате он может иметь «полное» регулярное выражение, соответствующее как этому поддомену, так и пути, и выполнять желаемое перенаправление.
Если вам не нужна эта функция, вы можете упростить правила.
Возможны ли эти альтернативы? Перенаправьте их все в специальное веб-приложение со статическим IP-адресом, который перенаправляет в нужную подпапку. Как я могу знать, из какого поддомена они пришли?
Нет надежного способа сделать это. Вы можете попробовать HTTP Referer, но он не всегда отправляется всеми браузерами, некоторые брандмауэры удаляют заголовок и т. Д.
Создавайте каждое правило программно, когда оно мне нужно. Какие поставщики DNS есть доступ к API для добавления правил? Я думаю, что Amazon Route 53 может быть ответьте здесь.
Это фактически привело бы к более сложному решению вышеупомянутого, поэтому я бы не рекомендовал его. Это также приведет к задержке: кеши DNS необходимо обновить, и некоторые посетители не смогут сразу использовать субдомен, пока они этого не сделают. По крайней мере, с моим предложением выше, они смогут начать действовать мгновенно.