1

Topic: Автоподдомены: как создать с помощью .htaccess

Если ваш хостинг не позволяет создать много поддоменов (субдоменов), то можно настроить файл .htaccess для создания неограниченного числа доменов. Мы организуем с вами своего рода автоподдомены с помощью всего одного файла .htaccess и одной папки с именем subdomains в корневом каталоге сайта.

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

Итак,  давайте для начала сделаем поддомены на свежем сайте, т.е. готовой структуры пока нет и можно делать все что угодно.

Создайте файл .htaccess в корне сайта и впишите в него следующий код:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.panbb\.(org|ru)$
RewriteCond %{HTTP_HOST} (www\.)?(.*)\.panbb\.(org|ru)$
RewriteCond %{REQUEST_URI} !subdomains/
RewriteRule ^(.*)$ subdomains/%2/$1

Теперь подробно остановимся на каждом пункте.
Для запуска mod_rewrite используется команда RewriteEngine on, если ее закомментировать, то весь код перестанет работать, часто это бывает очень полезно.
RewriteBase указывает на использование текущей папки.
RewriteCond устанавливает правила, в зависимости от которых будет или не будет произведена замена адреса. В первом случае проверяется является ли поддомен с названием www, естественно его перенаправлять не нужно, поэтому перед строкой стоит восклицательный знак, обозначая отрицание. В скобках указано com|ru, используется только если вы имеете два одинаковых домена в разных зонах и они являются псевдонимами (алиасам) другу друга. Если вы используете один сайт, то запись будет такой:

RewriteCond %{HTTP_HOST} !^www\.panbb\.org$

2

Re: Автоподдомены: как создать с помощью .htaccess

Во втором RewriteCond проверяется наличие в имени адреса поддомена, причем работать будет одинаково с www и без него, т.е. сайты forum.domain.ru и forum.panbb.ru будут обрабатываться одинаково.

Третье условие используется для проверки уже исправленного адреса, т.к. mod_rewrite выполняется пока условия перестанут подходить. Итак мы проверяем в строке запроса (URI, то что идет после имени домена, например /info.html) наличие папки куда мы перенаправили запрос, в данном случае это subdomains, перед ним стоит восклицательный знак, который сообщает, что условие не должно выполняться при наличии такой подстроки.

И наконец само правило преобразования адреса RewriteRule. В нем мы заменяем строку запроса на новый адрес:
subdomains + второй найденный элемент (условие RewriteCond %{HTTP_HOST} (www\.)?(.*)\.panbb\.(org|ru)$, то что находится во вторых скобках) + адрес, который был изначально ( описанный в том же RewriteRule: ^(.*)$)

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

3

Re: Автоподдомены: как создать с помощью .htaccess

Бывают ситуации, когда необходимо использовать два разных адреса для одной и той же папки, например:
panbb.ru/forum/
и
forum.panbb.ru
В данном случае у нас на сервере уже есть папка forum, и полностью копировать ее еще и в папку sub не очень удобно и не совсем правильно. Найденный вариант использования mod_rewrite не совсем универсальный, но все позволяет обслужить конечное число поддоменов:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^forum\.panbb\.(org|ru)$
RewriteCond %{REQUEST_URI} !/forum/
RewriteRule ^(.*)$ /forum/$1 [L]

Сначала проверяем нужный нам поддомен forum.domain.com (или forum.panbb.ru). Потом ищем строку /forum/ в самом запросе, проверяя не изменили ли мы уже этот адрес. И наконец делаем преобразование. Знак [L] обозначает окончание преобразования, если это правило выполнилось, то дальнейшая обработка прекращается.
Таких правил может быть сколько угодно, главное не забывайте о наличии нужных папок на сервере.
В некоторых случаях в панели хостинга нужно прописать алиас для вашего домена. Обычно там описаны два варианта:
panbb.org
и
www.panbb.org
Вам нужно добавить строку:
*.panbb.org

4

Re: Автоподдомены: как создать с помощью .htaccess

Теперь, когда все настроено и работает, возникает проблема со ссылками Sape. Они не будут нормально отображаться, потому что фактически адрес ссылки изменился, был ссылка , а стал, например, ссылка поэтому в коде Sape нужно прописать новый хост и путь к папке с базой. Выглядит это примерно так:

if (!defined('_SAPE_USER'))define('_SAPE_USER', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx');
require_once($_SERVER['DOCUMENT_ROOT'].'/subdomains/forum/'._SAPE_USER.'/sape.php');
$o['host']='forum.panbb.org';
$sape = new SAPE_client($o);
echo $sape->return_links();

Обратите внимание на путь к файлу sape.php в require_once и новое имя домена в $o['host']