Автоподдомены через .htaccess

Weisnar

Полезный
Регистрация
23 Сен 2008
Сообщения
157
Реакции
16
День добрый. Наверно всё-таки попробую спросить. А то сам пол дня экспериментировал и так ничего и не вышло.

Вопрос для знающего человека простой. Как создать автоподдомены посредством .htaccess

Описание этого процесса в Нете конечно есть.
И как-то косо криво что-то даже получается.

В общем, нужно:

Привести домен Для просмотра ссылки Войди или Зарегистрируйся
к виду: Для просмотра ссылки Войди или Зарегистрируйся


Все мы знаем простой пример ЧПУ:
RewriteRule ^p/(.*) index.php?p=$1 [L]
который сделает их Для просмотра ссылки Войди или Зарегистрируйся вариант: Для просмотра ссылки Войди или Зарегистрируйся

Ну или так:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /page.php?v=$1 [L]
Что сделает из Для просмотра ссылки Войди или Зарегистрируйся вариант: Для просмотра ссылки Войди или Зарегистрируйся

Но мне нужно именно из поддомена сделать переменную.
На данный момент сделал определение в самом скрипте. Получилось:
$buff=explode(".", $_SERVER [HTTP_HOST]);
Как результат, в переменной $buff[0] окажется значение подомена: ABCD
В переменной $buff[1] = site
$buff[2] = com

Но мне нужно это сделать как-то через .htaccess
 
Код:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.[a-z\d][a-z\d\-]*[a-z\d]\.[a-z]{2,6}$
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([a-z\d][a-z\d\-]*[a-z\d]\.[a-z]{2,6})$
RewriteRule .* page.php?v=%2 [L,QSA]
#или редирект
#RewriteRule .* http://%3/page.php?v=%2 [R,L]

также в httpd.conf должны быть верно прописаны ServerAlias и VirtualDocumentRoot
 
также в httpd.conf должны быть верно прописаны ServerAlias и VirtualDocumentRoot

Пока что большое спасибо. Хоть и проверить еще не могу, так как вопрос задавал на перспективу. Когда вернусть с каникул.

Так интуитивно чувствую, что ключевая строка тут "RewriteRule .* page.php?v=%1 [L,QSA]"
Кстати... заметил, что и сам не правильно вопрос поставил...

На самом деле... я хотел оставить поддомен в строке браузера, но параллельно и стобы он стал переменной.

Привести домен Для просмотра ссылки Войди или Зарегистрируйся
к виду: Для просмотра ссылки Войди или Зарегистрируйся


Сказать честно, у меня мозги начинают плавиться, когда пытаюсь найти закономерности и зависимости в этих шифровках.

Но по идеи, вот эта строка "RewriteRule .* page.php?v=%1 [L,QSA]" сделает как раз то, что мне надо. Потому что в Нете все описания именно на редирект. Когда адрес с ABCD.site.com преобразуется просто в адрес site.com?ABCD

А мне нужно как раз чтобы поддомен остался, чтобы это был как дочерний сайт.

В общем спасибо. Пойду пробовать.
 
Код:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# Главная страница и все страницы без поддоменов
RewriteCond %{HTTP_HOST} ^(www\.)?domen\.com(.*)$
RewriteRule ^([a-zA-Z0-9-]+)?/?([0-9]+)/?$ /index.php?mod=$1&page=$2 [L]
# Страница поддоменов но без страничек с параметрами
RewriteCond %{HTTP_HOST} !^(www\.)?domen\.com/?$
RewriteCond %{HTTP_HOST} ^(www\.)?(([a-zA-Z0-9-]+))\.domen.com/?$
RewriteRule ^([a-zA-Z0-9-]+)?/?$ /index.php?user=%2 [L]
# Страница поддоменов со страничками с дополнительными параметрами
RewriteCond %{HTTP_HOST} !^(www\.)?domen\.com(.*)$
RewriteCond %{HTTP_HOST} ^(www\.)?(([a-zA-Z0-9-]+))\.domen.com(.*)$
RewriteRule ^([a-zA-Z0-9-]+)?/?([0-9]+)/?$ /index.php?user=%2&mod=$1&page=$2 [L]
 
</IfModule>

У меня так работает.
Думаю разберешься что куда нуно подставить.
 
возможно из-за настроек apache(VirtualDocumentRoot) в переменную $1 передается путь, вызывающий с флагом L бесконечную рекурсию
и как решение, можно заменить $1 на %{REQUEST_URI} в предпоследней строчке:

Код:
RewriteRule .* http://%1.site.com%{REQUEST_URI} [R=301,L]

иначе только перепроверять httpd.conf
 
  • Заблокирован
  • #6
Подскажите, реально ли осуществить такое:
sub.site.ru/sub/sub.php ?
Что бы все это добро подтягивалось с одного места:
к примеру: site.ru/papka/
 
Назад
Сверху