Порой возникает необходимость создания нескольких сотен поддоменов. Очевидно что создание их вручную займет не мало времени. Но есть способ сделать все намного проще ![]()
Итак приступим.
Для того чтобы все заработало нам нужно будет три вещи:
- настроить зону в named-е
- настроить вхост в apach-е
- сделать правило через mod_rewrite
1. Первым делом нам нужно добавить «A» запись в фаил зоны:
* 14400 IN A 192.168.0.1
Где * будет означать, что запись будет резолвить абсолютно любой поддомен, 14400 время обновления зоны и 192.168.0.1, это ip адрес куда будут направленны поддомены.
Note: Стоит учитывать что named обрабатывает записи последовательно и любая запись добавленная после * не будет обработана.
2. Теперь переходим к конфигурировании веб сервера. Тут все проще, достаточно добавить директиву ServerAlias и все будет работать.
[code lang='css']
ServerAlias *.domen.ru
[/code]
Где * будет означать что вхост обрабатывает все поддомены и все они будут направлены в один и тот же DocumentRoot, а domen.ru это наш домен.
Note: Апач так же как и named читает конфигурационный фаил последовательно, поэтому любой поддомен добавленный ниже не будет обработан сервером.
3. Нам осталось создать правила mod_rewrite чтобы поддомен был направлен в папку домена. Создаем .htaccess следующего содержания:
[code lang='css']
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^(www\.)?domen\.ru$ [NC]
RewriteCond %{HTTP_HOST}---%{REQUEST_URI} ^([^\.]+)\.domen\.ru---/([^/]+)? [NC]
RewriteCond %1---%2 !^(.*)---\1$ [NC]
RewriteCond %{DOCUMENT_ROOT}/%1/ -d
RewriteRule ^(.*)?$ %1/$1 [QSA,PT]
[/code]
Теперь любая папка например http://domen.ru/papka1/ будет доступна по адресу http://papka1.domen.ru/
Но такой вариант не всегда приемлем, и иногда нужно чтобы поддомены находились в вложенной папке скажем в http://domen.ru/sub/papka1/. Для этого делаем другой .htaccess:
[code lang='css']
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.domen\.ru$ [NC]
RewriteCond %{HTTP_HOST} !^www\.domen\.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/sub
RewriteRule ^(.*) %{HTTP_HOST}$1
RewriteRule ^(.*)\.domen\.ru(.*) /sub/$1$2
RewriteRule ^sub\.(.*) /sub/$1
[/code]
Практически все панели управления позволяют сделать подобные вещи через внутренние интерфейсы, так что проблем быть не должно.
P.S. Цените свое время и не теряя его на рутину.

{ 2 trackbacks }
{ 2 comments… read them below or add one }
Я так понимаю, первые два пункта может сделать только хостинг-провайдер? А разрешит ли он, скорее, захочет ли он такое делать? Если на каком то хостинге можно это сделать, подскажите плиз адрес…
Первые два пункта действительно требуют привилегий, но как я написал многие панели управления дауют такой функционал даже пользователям.
Среди известных мне хостинг провайдеров проблемно сделать такое только в крупных компаниях (по типу мастерхоста и т.п), а у остальных проблем нет.
Ссылок на хотсеров не дам так как выбор хостинга только по этому критерию будет ошибкой.
Leave a Comment