Точка с Запятой;

The Sydney Domain.

The Sydney Domain

Сиднейская Долина, основанная в 1788 году, — одно из самых привлекательных для фотографов мест в Сиднее. Вот уж не думал, что обыденное слово «domain» может означать такую красоту.

Загадка природы

Когда я впервые увидел хабр — меня очень сильно заинтересовала техника динамического создания субдоменов на каждого юзера. Год назад для меня это казалось, по меньшей мере, магией. Тогда я поискал ответы в яндексе и гугле, не нашел ничего путного и забыл про это дело.

Второе пришествие

Определение слова «wildcard».

Поскольку мне и для диплома в универе, и для проектных нужд надо написать свой движок социалки — вопрос с динамическими субдоменами снова встал. В этот раз решение было найдено легко! Называется эта техника «wildcard hosting».

Для динамического создания субдоменов необходимо настроить DNS, Apache и mod_rewrite (хотя я знаю, как можно и без него, но об этом далее).

DNS

Даже m. нынче предоставляет простым смертным (пользователям виртуального хостинга) копошиться в настройках DNS для своих доменов. Для того, чтобы обеспечить wildcard, надо создать всего одну строчку:

*.example.com IN A 192.168.1.1

Угадай сам, как составить нужную строку для своего любимого домена.

Apache

С настройками 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

Товарищи буржуи предлагают выделять динамические субдомены на уровне 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

Основа кода — bigstreet.

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 окажется название субдомена. Делай с ним все, что хочешь.

PS

В следующий раз я хочу рассказать тебе про самый легкий способ кросс-доменного аякса и про гаджеты гугла.

С любовью, Юра.

Запись опубликована 07.04.08
в рубриках: Берем уроки, Занимательное :).

Предыдущая запись

У природы нет плохой погоды. Меняем дизайн сайта в зависимости от погодных условий.

Следующая запись:

В гостях у Антона и Ольги

Комментарии

  1. Может нам со скуки (пока автор новые посты не накропал), о Mode Rewrite поболтать?

  2. Давайте плясать и веселиться!

  3. О мод реврайте кстате можно поговорить), нашел как сделать чтоб не перекидывало, вместо R=301, указать P, правда говорят что он сервер нагружает больше, ктони-будь что-нибудь слышал такое? :)

  4. Всегда использовал апач для настройки сабов, но данныя статейка даже слегка упростила работу. Зачет. Будет как альтернатива :).

  5. BART:

    Статья хорошая, а есть идеи как реализовать к доменам префикс http://www. , сейчас просто кидает на главный домен. ?

  6. Nicholass , что такое фрики-вей? Типа хакер-путь?

  7. Ого! Кто-то оставил коммент от моего имени на какой-то раскручиваемый сайт… Спамеры уже задрали, блин.
    К авторам блога - удалите коммент, который не от меня, если не сложно.

  8. Достаточно смелое заявление. :) Просто у всех свой опыт.

  9. Спасибо. Прочитал с интересом, и вообще полезный у Вас блог

  10. А нельзя ли ServerAlias в .htaccess проставить?

    С уважением, Меганит.

Прокомментируйте