Поддомены и автоподдомены средствами .htaccess
Posted on 13 Февраль 2013 in Веб разработка by wakh
Мой уже почти бывший хостинг, снова выкинул "подлянку" с поддоменами - любой запрос стал редиректится на основной домен.
Т.к. Тех.поддержка по выходным у них не работает, пришлось в срочном порядке делать RTFM. Конечно доступа к конфигам Апача у меня не было, но проблему удалось решить на голом .htaccess.
Подробности под катом, как говорится.
Итак, приведу фрагмент файла
#Обязательное условие - включаем RewriteEngine RewriteEngine On #Не всегда обязательная директива, попробуйте с ней и без неё #RewriteBase / #1 Склейка www и домена без #1.1. Склейка www.домен.ру с домен.ру RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^(.*) http://%1/$1 [L,R=301] #1.2. Склейка домен.ру с www.домен.ру RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC] RewriteRule ^(.*) http://%1/$1 [L,R=301] #2. Создаём поддомены # Склейка хттп://папка.сайт.ру с физической хттп://сайт.ру/папка без изменения строки браузера #2.1. Вариант условий для любой папки кроме www RewriteCond %{HTTP_HOST} !^www\.site\.ru$ RewriteCond %{HTTP_HOST} ^(.+)\.site\.ru$ RewriteCond %{REQUEST_URI} !/%1/ RewriteRule ^(.*)$ /%1/sub/$1 [L,QSA] #2.2. Вариант для определённых поддоменов RewriteCond %{HTTP_HOST} ^(sub1|sub2|sub3)\.site\.ru$ RewriteCond %{REQUEST_URI} !/%1/ RewriteRule ^(.*)$ /%1/$1 [L,QSA] #3. Перенаправление хттп://сайт.ру/папка на хттп://папка.ру.сайт в строке браузера #3.1. Вариант условий для любой папки кроме www #3.2. Вариант для определённых поддоменов RewriteCond %{HTTP_HOST} ^site\.ru$ RewriteRule ^(sub1|sub2|sub3)/(.*)$ http://$1.site.ru/$2 [L,R=301]
Первым (#1) пунктом идёт "классическая" склейка. Это универсальный вариант, идеальный для копипаста на любые сайты.
Использовать только 1 из вариантов, что логично.
Создание поддоменов происходит в #2. Имейте ввиду что для успеха этой акции, в ДНС необходимо присутствие 2х строк:
* A IP site.ru. A IP
IP должны быть одинаковыми. Вторая строчка будет присутствовать по умолчанию.
В первом (#2.1) варианте поддоменами становятся все папки в папке sub, если вы хотите другой путь то измените фрагмент строки "sub/" на нужный вам, для корня сайта, просто сотрите "sub/", но имейте ввиду что все папки станут субдоменами. Этот вариант можно назвать автоподдоменами или димамическими поддоменами.
Если вы не дорвейщик, то предпочтителен второй (#2.2) вариант - определённые папки (в примере это sub1|sub2|sub3) становятся поддоменами, остальные папки работают как и должны. Путь к физическому расположению поддоменов тоже можно изменить, см #2.1
В третьем (#3) пункте создаётся запрет на доступ к папке кроме как через поддомен, это нужно чтобы избежать дублирование контента. Как вы могли заметить пункта #3.1 нет, т.к. мне он был не нужен, доработайте сами или напишите мне, если будет время сделаю. Пункт #3.2 у меня не заработал, но тестирование было в ситуации проблемы в конфигурации Апача, но работать должен.
Оба варианта смогу проверить уже на новом хостинге, буквально через пару дней.
Комментарии.
символ # означает что строка после него - комментарий.
site это имя вашего сайта
sub1..sub3 имя вашего поддомена
флаги.. есть в спецификации апача ;)