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

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем Weisnar, 6 янв 2011.

  1. Weisnar

    Weisnar

    Регистр.:
    23 сен 2008
    Сообщения:
    161
    Симпатии:
    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
     
  2. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    Код:
    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
     
  3. Weisnar

    Weisnar

    Регистр.:
    23 сен 2008
    Сообщения:
    161
    Симпатии:
    16
    Пока что большое спасибо. Хоть и проверить еще не могу, так как вопрос задавал на перспективу. Когда вернусть с каникул.

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

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

    Привести домен Перейти по ссылке
    к виду: Перейти по ссылке


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

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

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

    В общем спасибо. Пойду пробовать.
     
  4. goodvin

    goodvin Человек-Волшебник

    Регистр.:
    27 июн 2006
    Сообщения:
    667
    Симпатии:
    687
    Код:
     
    <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>
     
    
    У меня так работает.
    Думаю разберешься что куда нуно подставить.
     
  5. pitkina

    pitkina

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

    Код:
    RewriteRule .* http://%1.site.com%{REQUEST_URI} [R=301,L]
    иначе только перепроверять httpd.conf
     
  6. Carleone

    Carleone Постоялец

    Заблокирован
    Регистр.:
    8 ноя 2012
    Сообщения:
    51
    Симпатии:
    39
    Подскажите, реально ли осуществить такое:
    sub.site.ru/sub/sub.php ?
    Что бы все это добро подтягивалось с одного места:
    к примеру: site.ru/papka/