
Сиднейская Долина, основанная в 1788 году, — одно из самых привлекательных для фотографов мест в Сиднее. Вот уж не думал, что обыденное слово «domain» может означать такую красоту.
Когда я впервые увидел хабр — меня очень сильно заинтересовала техника динамического создания субдоменов на каждого юзера. Год назад для меня это казалось, по меньшей мере, магией. Тогда я поискал ответы в яндексе и гугле, не нашел ничего путного и забыл про это дело.
Поскольку мне и для диплома в универе, и для проектных нужд надо написать свой движок социалки — вопрос с динамическими субдоменами снова встал. В этот раз решение было найдено легко! Называется эта техника «wildcard hosting».
Для динамического создания субдоменов необходимо настроить DNS, Apache и mod_rewrite (хотя я знаю, как можно и без него, но об этом далее).
Даже m. нынче предоставляет простым смертным (пользователям виртуального хостинга) копошиться в настройках DNS для своих доменов. Для того, чтобы обеспечить wildcard, надо создать всего одну строчку:
*.example.com IN A 192.168.1.1
Угадай сам, как составить нужную строку для своего любимого домена.
С настройками Apache всё может быть не так просто: по крайней мере, на виртуальном хостинге вряд ли дадут покопаться в папке /etc/apache2/vhosts.d/. Хотя, всё бывает, может быть, я чего-то и не знаю в этом мире 8)
В общем, если у тебя есть доступ к конфигам виртуальных хостов Apache, то тебе надо добавить в конфиг нужного домена всего одну строку. Например, так:
ServerName www.example.com ServerAlias *.example.com DirectoryIndex index.html DocumentRoot /home/www/www.example.com/htdocs ...
Да-да, именно ServerAlias делает всю погоду в настройках веб-сервера.
Товарищи буржуи предлагают выделять динамические субдомены на уровне mod_rewrite и направлять в ссылку как обычный параметр. Может быть, где-то это и удобно, но wildcards тем и хороши, что добавляют еще одну степень свободы для формирования URL. Все равно, опишу этот метод.
В корень папки сайта нужно поместить файл .htaccess с такими строками:
RewriteEngine on
RewriteCond %{http_host} .
RewriteCond %{http_host} !^www.example.com [NC]
RewriteCond %{http_host} ^([^.]+)\.example.com [NC]
RewriteRule ^(.*) http://www.example.com/%1/ [R=301,L,QSA]
Первая строка включает mod_rewrite, вторая для меня неизвестная, третья предотвращает переписывание www.example.com в example.com/www/, четвертая выдергивает псевдосубдомен, а пятая помещает его в конец ссылки.
При таком раскладе все обращения к серверу вида subdomain.example.com приведутся к example.com/subdomain/.
PHP я взял, исходя из простоты и популярности. Распарсить HTTP_HOST можно на любом языке серверного программирования.
Итак, если ты хочешь больше степеней свободы, то вместо редактирования .htacces тебе надо дописать несколько строк в PHP-скрипт. В самом начале обработки юзерского запроса надо написать такой код:
$pathWeb = 'http://example.com'; $pathClear = preg_replace("/\/?$/", "", preg_replace("/^http:\/\//", "", $pathWeb)); if($_SERVER['HTTP_HOST'] != 'www.'.$pathClear and $_SERVER['HTTP_HOST']!= $pathClear) { $subdomain = preg_replace("/\.".$pathClear.".?$/", "", $_SERVER['HTTP_HOST']); }
И тогда в переменной subdomain окажется название субдомена. Делай с ним все, что хочешь.
В следующий раз я хочу рассказать тебе про самый легкий способ кросс-доменного аякса и про гаджеты гугла.
С любовью, Юра.
Может нам со скуки (пока автор новые посты не накропал), о Mode Rewrite поболтать?
Давайте плясать и веселиться!
О мод реврайте кстате можно поговорить), нашел как сделать чтоб не перекидывало, вместо R=301, указать P, правда говорят что он сервер нагружает больше, ктони-будь что-нибудь слышал такое? :)
Всегда использовал апач для настройки сабов, но данныя статейка даже слегка упростила работу. Зачет. Будет как альтернатива :).
Статья хорошая, а есть идеи как реализовать к доменам префикс http://www. , сейчас просто кидает на главный домен. ?
Nicholass , что такое фрики-вей? Типа хакер-путь?
Ого! Кто-то оставил коммент от моего имени на какой-то раскручиваемый сайт… Спамеры уже задрали, блин.
К авторам блога - удалите коммент, который не от меня, если не сложно.
Достаточно смелое заявление. :) Просто у всех свой опыт.
Спасибо. Прочитал с интересом, и вообще полезный у Вас блог
А нельзя ли ServerAlias в .htaccess проставить?
С уважением, Меганит.