В процессе манипуляций с хостингом случайно грохнул
сайт Репла - аудиоплеера для Мака. Срочно в панике починил. Заодно вспомнил старый фокус с 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, ты вели́к:)