Автосабдомены в строю или вайлдкарды в действии

by skid on Февраль 20, 2008

Порой возникает необходимость создания нескольких сотен поддоменов. Очевидно что создание их вручную займет не мало времени. Но есть способ сделать все намного проще :)
Итак приступим.

Для того чтобы все заработало нам нужно будет три вещи:

  • настроить зону в 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 }

SeoCoders » named.conf с чем и как его едят, или настроим ДНС сами
02.20.08 at 23:34
Поддомены
03.14.08 at 13:29

{ 2 comments… read them below or add one }

1 Ezo-блог 03.01.08 at 21:06

Я так понимаю, первые два пункта может сделать только хостинг-провайдер? А разрешит ли он, скорее, захочет ли он такое делать? Если на каком то хостинге можно это сделать, подскажите плиз адрес…

2 skid 03.04.08 at 04:55

Первые два пункта действительно требуют привилегий, но как я написал многие панели управления дауют такой функционал даже пользователям.
Среди известных мне хостинг провайдеров проблемно сделать такое только в крупных компаниях (по типу мастерхоста и т.п), а у остальных проблем нет.

Ссылок на хотсеров не дам так как выбор хостинга только по этому критерию будет ошибкой.

Leave a Comment

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">