Динамические поддомены с помощью mod_rewrite

Область применения динамических поддоменов

Поддомены такого типа применяются для самого разного круга задач: от создания многоязыковой версии сайта, до простого вынесения подразделов портала в самостоятельные минисайты.

Вот примеры использования этого решения:

  • На Хабре, динамические поддомены используются для страницы профиля пользователя;
  • В большинстве всероссийских досок объявлений, поддомены используются для разделения объявлений по городам;
  • Динамические поддомены используют большинство сайто- и блогохостингов, такие как, например, blogspot.com.

Определились с областью использования? Отлично! Перейдем непосредственно к настройке вашего сайта или блога.

Изменяем настройки DNS

Чтобы сервер корректно обрабатывал динамические поддомены, необходимо добавить одну маленькую запись в настройки DNS. Это можно сделать, используя панель управления сервером.

Просто добавьте следующую запись формата A ("A record" в англоязычной версии):

*.site.ru

Здесь необходимо заменить site.ru на имя вашего домена. В качестве IP адреса используйте тот же адрес, что и у основного сайта. Кстати, в некоторых панелях, достаточно в качестве имени записи просто написать * (звездочка), без указания полного имени домена.

Добавляем DNS запись

Возможно, потребуется некоторое время для того, чтобы DNS записи обновились.

Добавляем алиасы для домена

В качестве следующего шага, нам необходимо указать в конфиге Apache тот факт, что у нашего сайта могут быть поддомены с произвольным именем. Это делается с помощью инструкции ServerAlias примерно так:

ServerAlias *.site.ru

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

<VirtualHost *:80>
DocumentRoot /path/to/dir/westseo.ru
ServerName westseo.ru
ServerAlias *.westseo.ru
</VirtualHost>

Внимание! Если вы, наряду с динамическими поддоменами используете их "обычных" коллег, то убедитесь, пожалуйста, что алиас *.site.ru идет после всех алиасов традиционных поддоменов. Например, так:

<VirtualHost *:80>
DocumentRoot /path/to/dir/westseo.ru
ServerName westseo.ru
ServerAlias rating.westseo.ru dict.westseo.ru www.westseo.ru *.westseo.ru
</VirtualHost>

Перезагрузите ваш вебсервер и продолжим наши доработки. Осталось совсем немного.

Внесение изменений в .htaccess

Добавьте следующие инструкции в начало файла .htaccess

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.site\.ru [NC]
RewriteRule (.*) http://site.ru/$1/ [L,R=301]

RewriteCond %{HTTP_HOST} ^(.+)\.site/? [NC]
RewriteRule (.*) http://site.ru/$2/$1/ [L]

Разберем этот код поподробнее.

RewriteEngine On
RewriteBase /

Этот блок включает модуль mod_rewrite и устанавливает базовый URL.

RewriteCond %{HTTP_HOST} ^www\.site\.ru [NC]
RewriteRule (.*) http://site.ru/$1/ [L,R=301]

Здесь мы указываем вебсерверу, что с поддомена www должен быть выполнен 301-й редирект на домен без www. Это полезно для унификации домена и ссылок на него с точки зрения поисковых систем.

RewriteCond %{HTTP_HOST} ^(.+)\.site/? [NC]
RewriteRule (.*) http://site.ru/$2/$1/ [L]

Основной блок. Он выполняет переадресацию с адреса вида http://seo.site.ru/trust/ на http://site.ru/seo/trust/, для последующей обработки ядром сайта.

 

Оригинал - http://westseo.ru/mod-rewrite-subdomain/