Привязка домена к каталогу средствами mod_rewrite в файле .htaccess

May 06, 2015 11:54



В процессе манипуляций с хостингом случайно грохнул сайт Репла - аудиоплеера для Мака. Срочно в панике починил. Заодно вспомнил старый фокус с htaccess.

Не знаю, какие сейчас тенденции, но несколько лет назад, когда я работал в Петерхосте, у нас каждый дополнительный сайт стоил каких-то денег. Небольших, но как факт. А клиенты хотели сайтов много и бесплатно. При этом, если у клиента уже есть домен, то поддомены к этому домену всегда были бесплатными. Поэтому, у клиентов возникала мысль - наделать бесплатных поддоменов и каким-либо образом связать их с определенными подкаталогами в одном-единственном платном сайте.

К примеру, есть поддомен site.ru. И есть сайт на этом домене. Внутри сайта делаем каталог sites, а в нем, скажем, подкаталоги  site1 и site2. Затем делаем поддомены site1.site.ru и site2.site.ru. Ну, и осталось привязать поддомены к соответствующим подкаталогам.

Вопрос в том, как сделать эту привязку.

Веб-сервер Apache позволяет сделать это с помощью mod_rewrite. Это модуль для переписывания запросов к сайту "на лету". Несколько директив mod_rewrite в файле .htaccess позволяют привязать произвольное количество доменов к произвольному количеству каталогов. Бесплатно. Святой Грааль клиентов виртуального хостинга. Клиенты постоянно писали письма с просьбами подсказать им эти директивы, но у нас было негласное правило никогда такую подсказку не давать.

И вот тут мне вдруг понадобилось сделать этот самый фокус с привязкой. Далается это так (на примере домена re-pl.ru):

RewriteCond %{HTTP_HOST} ^re-pl\.ru$
RewriteCond %{REQUEST_URI} !^/sites
RewriteRule ^(.*) /sites/repl/$1

Что это значит:

- В первой строке делается проверка домена, чтобы выполнить привязку только для нужного домена, а не для всех подряд.
- Во второй строке делается проверка, что запрос еще не был переписан (переписанный запрос будет начинаться с /sites). Если не сделать эту проверку, mod_rewrite зациклится и будет переписывать запрос бесконечно.
- В третьей строке производится, собственно, переписывание запроса. Всё, что было набрано в запросе, будет перенаправлено в каталог sites/repl, в котором находится сайт.

UPD Оказывается, на хостинге deephost.ru, где я хостюсь, htaccess с этими директивами дается клиентам по-умолчанию. schors, ты вели́к:)

mod_rewrite, htaccess, apache

Previous post Next post
Up