Поддомены и автоподдомены средствами .htaccess

Мой уже почти бывший хостинг, снова выкинул "подлянку" с поддоменами - любой запрос стал редиректится на основной домен.

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

флаги.. есть в спецификации апача ;)

Comments

Генадий
Генадий said: 20-09-’13 15:39
wakh
wakh said: 25-09-’13 16:04
wlad
wlad said: 09-03-’15 18:29
wakh
wakh said: 10-03-’15 12:09
Xstroy
Xstroy said: 24-04-’15 13:33
wakh
wakh said: 25-04-’15 00:26
I.CaR Soft
I.CaR Soft said: 02-03-’16 19:37
yaumamyprogrammist
yaumamyprogrammist said: 10-12-’16 22:37
wakh
wakh said: 05-04-’17 13:36
Юрий
Юрий said: 21-06-’17 22:14
<span class='registered'>wakh</span>
wakh said: 22-06-’17 13:37

Leave a comment


Comment moderation is enabled on this site. This means that your comment will not be visible until it has been approved by an editor.