что прописать в htaccess для поддоменов

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

  1. acelotuse

    acelotuse

    Регистр.:
    31 мар 2009
    Сообщения:
    312
    Симпатии:
    37
    Незнал, как более точно назвать тему, так что не вините.

    В общем, ситуация такая.
    Сайт на ДЛЕ движке.
    Есть основной домен, и есть поддомен. На обоих стоит ДЛЕ. Поддомен планируется использовать как смартверсию. Основной, естественно, как основную версию ПК. Оба используют одну и ту же базу данных, всё, включая новости, комменты, форум, юзеров и т.п.
    Использовать стандартную возможность перехода на смартверсию в ДЛЕ не хочу. Она ограничена. Использование поддомена позволит расширить возможности смарт-версии.
    Но тут получается загвоздка. А она в следующем.
    Все ссылки в базе данных имеют вид Перейти по ссылке, т.е. или с www или без.
    На основном домене в корне сайта файл htaccess имеет следующий код:
    Код:
    RewriteCond %{HTTP_HOST} ^govzpeople83.ru
    RewriteRule (.*) http://www.govzpeople83.ru/$1 [R=301,L]
    чтобы страницы все имели адрес с www.
    Т.е. получается, что находясь на основном домене, все ссылки в новостях, комментах и т.п. будут перебрасывать на www.
    Но смартверсия использует ту же базу! И значит если перейти на смартверсию, и нажать на какую нибудь ссылку в новости или комменте, то она автоматически перебросит на основной домен (а не оставит в смартверсии).
    Пытался в файле htaccess в смарт-поддомене добавить нечто:
    Код:
    RewriteCond %{HTTP_HOST} ^govzpeople83.ru
    RewriteRule (.*) http://pda.govzpeople83.ru/$1 [R=301,L]
    Т.е. как видите, разница в pda. Однако, это не помогло.
    В общем, незнаю, передал ли вам суть проблемы или нет, но под конец подытожу:
    нужно, чтобы будучи на основном домене действовало правило С ИСПОЛЬЗОВАНИЕМ WWW,
    а чтобы будучи на pda-версии, используя ту же базу, все ссылки автоматом становились без www но с PDA.сайт.ру

    Заранее всем спасибо за отзывы и советы.

    Модеры! Тему создал тут, а не в ДЛЕ, потому что думаю, что реализация скорее в htaccess чем в движке.
     
  2. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    переменная HTTP_HOST содержит текущий хостнейм запрашиваемого url, т.е. http;//www,sub.site.com/index.php или http;//site.com/index.php
    и в случае отдельных .htaccess, правило прописывается для каждого хоста

    для поддомена
    Код:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.pda\.govzpeople83\.ru$
    RewriteRule (.*) http://pda.govzpeople83.ru/$1 [R=301,L]
    для домена
    Код:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^govzpeople83\.ru$
    RewriteRule (.*) http://www.govzpeople83.ru/$1 [R=301,L]
     
    acelotuse нравится это.
  3. acelotuse

    acelotuse

    Регистр.:
    31 мар 2009
    Сообщения:
    312
    Симпатии:
    37
    Проверил, не помогло. Проблема осталась. Если нахожусь на поддомене pda. то заходя по ссылке вида Перейти по ссылке или без www все равно перебрасывает с поддомена на основной.
     
  4. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    для основного домена:
    Код:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(www\.)?govzpeople83\.ru$
    RewriteCond %{HTTP_REFERER} pda\.govzpeople83\.ru
    RewriteRule .* http://pda.govzpeople83.ru%{REQUEST_URI} [R=301,L]
    
    RewriteCond %{HTTP_HOST} ^govzpeople83\.ru$
    RewriteRule (.*) http://www.govzpeople83.ru/$1 [R=301,L]
    т.е. htaccess домена будет редиректить на сабдомен, если в рефере есть pda.govzpeople83.ru
     
    acelotuse нравится это.
  5. acelotuse

    acelotuse

    Регистр.:
    31 мар 2009
    Сообщения:
    312
    Симпатии:
    37
    А на поддомен тогда не надо ничего прописывать?
     
  6. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    получается что да, т.к. это не входит в ТЗ
    но если оставить, будет перенаправление всех страниц с www. subdomain на subdomain
     
    acelotuse нравится это.
  7. acelotuse

    acelotuse

    Регистр.:
    31 мар 2009
    Сообщения:
    312
    Симпатии:
    37
    Спасибо большущее. Работает все именно так, как я и хотел.
    Но по незнанию своему теперь столкнулся с новой проблемой. )))
    Как теперь сделать, чтобы была возможность переходить с поддомена на домен? Я имею ввиду ссылку для пользователей. Ведь если указать в поддомене ссылку на основной, то она автоматически все-равно перекинет не поддомен. )))
    Конечно, есть вариант прописывать в адресной строке браузера, менять www на pda и наоборот. Но это, естественно, не вариант.
    Можете что-нибудь посоветовать?
     
  8. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    в этом случае можно давать ссылку на основной с подзапросом:
    site.com/?to_main или site.com/?page&to_main

    и при замене
    Код:
    RewriteCond %{HTTP_REFERER} pda\.govzpeople83\.ru
    на
    Код:
    RewriteCond %{HTTP_REFERER} pda\.govzpeople83\.ru
    RewriteCond %{QUERY_STRING} !to_main
    # исключения для загрузки на сервер (POST запрос) и для картинок
    RewriteCond %{REQUEST_METHOD} !^POST$
    RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|gif)$ [NC]
    подзапрос будет отменять редирект
     
    acelotuse нравится это.
  9. acelotuse

    acelotuse

    Регистр.:
    31 мар 2009
    Сообщения:
    312
    Симпатии:
    37
    гениально!
    Спасибо большое!
    Все работает идеально. Переходы между поддоменом и основным доменом работают хорошо, никаких проблем.
    Только вот неприятность теперь случилась с модулем загрузок файлов на сервер. Если отключить весь код, указанный выше, то загрузка работает. Так что проблема именно в этом.
    Может есть код, который работает в качестве исключений для некоторых типов файлов?
    Да, кстати, на всякий случай неплохо было бы использовать код, который не менял бы основной домен на поддомен в путях к изображениям. Можно такое сделать?
    Заранее спасибо.