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