вторник, 28 июля 2009 г.

.htaccess и поддомены (sudomains)

Господи, как же давно тут не был. Буду теперь пользовать сие детище web-индустрии.

Основная причина, для которой используется подобная возможность Apache и .htaccess - это возможность использования неограниченного количества поддоменов, считая, что каждая папка с контентом в заранее обусловленной, является поддоменом. Например, (тут и далее будут приводиться реальные примеры) есть сайт pfo.su, в нем есть папка cities, в которой куча других папок (kirov, kazan и тд), их и надо сделать поддоменами. Т.е. kirov.pfo.su на самом деле является pfo.su/cities/kirov/.
Спасибо этой статье за подкинутую мысль.
Решение проблемы оказалось элементарным. Нужно было лишь в файле .htaccess, находящемся в корне pfo.su, прописать следующее:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !^/cities
RewriteCond %{HTTP_HOST} !^www\.pfo\.su$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.pfo\.su$ [NC]
RewriteRule ^(.*)$ cities/%2/$1

Где:
RewriteEngine On [включаем движок перезаписи]
RewriteBase / [указываем, что перезапись будет производиться в текущем каталоге]
RewriteCond %{REQUEST_URI} !^/cities [отклоняем прямые запросы в папку cities с поддоменами]
RewriteCond %{HTTP_HOST} !^www\.pfo\.su$ [NC] [указываем, что правила действуют только для сайтов на поддоменах, а не на самом pfo.su]
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.pfo\.su$ [NC] [проверяем, идет ли запрос на поддомен]
RewriteRule ^(.*)$ cities/%2/$1 [выдаем контент из папки поддомена, название которого берем из вторых скобок предыдущего выражения, его дописываем к запросу в папку cities и в самый конец приписываем сопсно сам URI]

Вот и все.