Ошибка перенаправления в субдоменах
Ищутся добрые люди готовые помочь!
3и или 4е сутки не могу собрать следу штуку :( : ЗАДАЧА: При заходе на site.spb.ru по установленным кукам посетитель перенаправлялся на один из субдоменов и там оставался. Позже добавить на весь сайт редиект «с www» на «без www». ПОДРОБНЕЙ: Пользователь заходит на site.spb.ru В корне сайта лежит htaccess Код:
RewriteEngine On 1. Если куки установлены то в зависимости от них идет перенаправление на sub1.site.spb.ru или sub2.site.spb.ru 2. Если куков нет то ждется переход от пользователя на sub1.site.spb.ru или sub2.site.spb.ru Где и ставятся куки. ПРОБЛЕМА: Редирект по куки на на субдомены идет но с ошибкой: «Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.» «Эта проблема может возникать при отключении или запрещении принятия cookies.» Все вышесказанное работает на виртуальном хостинге, PHP не используется, JavaScript тоже, остальные скрипты тоже - Только META теги, htaccess, html ! Саппорт хостинга предложил что-то непонятное но вроде правдивое: «Объясняю на примере Итак, посетитель заходит на site.spb.ru, оттуда идет на страницу /sub1 Сейчас по умолчаню ему выдается cookie, а надо бы проверить реферер Если реферрер НЕ sub1.site.spb.ru, то выдаем cookie и редиректим на поддомен Поскольку посетитель новый, его перенаправили на поддомен Итак, мы попадаем на ту же самую страницу. Но повторного редиректа не происходит, поскольку этому мешает реферрер.» = Пробовал закрывать по рефералу - не сработало :( Код:
RewriteCond %{HTTP_REFERER} ^http://(www\.)?en\.site\.spb\.ru/index.html$ [NC,OR] Кто может, помогите решением! Если необходимо могу приаттачить в zip весь пример. Помогите пожалуйста! |
если кукис отсылается с каждым запросом, то у вас вечный редирект будет... нужно добавить дополнительную проверку (нпр по %{HTTP_HOST}), и уточнить, на какой домен ставится кукис (может на все субдомены)...
реферер может и не отсылаться вовсе (регулируется в браузере), впрочем, как и кукисы... Цитата:
|
Цитата:
Кукис ставится на только на корень сайта Ставится из субдоменов Подскажите пожалуйста код для проверки (пробавал по совету одного хорошего человека с другого форума поставить RewriteCond %{HTTP_HOST} !^(en|ru) [NC] но не помогло :( ) Цитата:
в оригинале их нет. пост исправлю. Что еще необходимо экранировать? |
т.е. если в наличии кука setting и НЕ субдомен sub1-2 то редиректим на субдомен 4 уровня
Код:
RewriteCond %{HTTP_COOKIE} setting\=([^\;]+) [NC] Код:
RewriteCond %{HTTP_COOKIE} setting\=([^\;]+) [NC] вообще тут использование куков непонятно (в зависимости от чего ставятся куки, и на домен какого уровня) |
Спасибо. Сегодня ночью как проснусь проверю код.
Код:
RewriteCond %{HTTP_HOST} !^(www\.)?sub[12]\.site\.spb\.ru$ - навроде (en|ru) Цитата:
- ставятся на корень сайта - там где лежит htaccess который и перенаправляет... |
Цитата:
Цитата:
разберитесь с матчастью... |
Цитата:
Цитата:
А вот на субдомены нет :( С матчастью воевать уже не готов - достала - 4или 5тые сутки. |
Цитата:
Код:
!^(www\.)?(en|ru)\.site\.spb\.ru$ |
Српасибо.
Цитата:
Для редиректа в зависимости от языка браузера есть вроде как специальная директива Даже "калькулятор htaccess" в нете видел который строет такое перенаправление. 2 или 3 строки. Задача в том что Пользователь один раз зайдет с site.spb.ru на ru.site.spb.ru и ему запишутся куки И в следующий раз заходя на site.spb.ru будет перенаправление по куки на ru.site.spb.ru Только что-то заело :drug: Буду пробовать ваше предложение сегодня ночью :tomato2: |
Цитата:
кукис можно через флаг в правиле поставить... |
Цитата:
Цитата:
Код:
RewriteRule ^(.*)(ru|en)/$ - [co=lang:$2:.site.spb.ru:7200:/] Цитата:
Может еще какой есть... или я не понял о чем вы ;)? |
остается javascript: вешать на ссылки перехода ru\en события onclick, по которым ставить кукис...
|
Цитата:
Вот странная штука: все нижеследующие примеры рабочие Может хочтер что-то вписал без моего ведома.. может я по недосыпу навалял дурака. Посмотрите пожалуйста - на каком варианте лучше остановить выбор? Код:
RewriteEngine On |
там где с проверкой домена (как страховка от зацикливания), а про регулярное выражение с доменом вам лучше знать...
Код:
RewriteCond %{HTTP_COOKIE} lang\=([^\;]+) [NC] |
Огромное спасибо!!!! :yahoo:
(жаль нет кнопочки спасибо, а "полезное сообщение" столь мала ;) Цитата:
|
в том смысле, что вторая строка - это проверка домена из запроса, и регулярное выражение можно по-разному составить - вам виднее как это сделать (любой вариант подойдет).
|
Пробовал добавить условие:
с www.sub1.site.spb.ru (длинновато... но думаю пригодится для субдоменов) на sub1.site.spb.ru - тобешь убираем www Попробовал два нижеследующих вариант (min www v2 и min www v2) Но они не сработали :( Подскажите пожалуйста как можно подправить? Код:
# OS zone v3 |
Цитата:
Код:
RewriteRule .? http://%1.site.spb.ru/ [R,QSA] Цитата:
Цитата:
|
Цитата:
Код:
# OS zone выглядеть так? |
Код:
RewriteCond %{HTTP_HOST} ^www\.(ru|en)\.site\.spb\.ru [NC] |
Код:
RewriteCond %{HTTP_HOST} ^www\.(ru|en)\.site\.spb\.ru [NC] http://www.ru.site.spb.ru/ идет переход на http://ru.justplan.spb.ru/ru// Удалил в второй строке /$1 переход идет на http://ru.justplan.spb.ru/ - как и нужно... Но мне кажется или нет что /$1 удалять неправильно? |
$1 - это содержимое первой подмаски правила (что в скобках). если подмаски не нужно, то достаточно ".?" и без $1
|
Цитата:
Примеров без под маски много - нашел бы. Спасибо что помогли, подсказали с подмаской! Получается последнее /$1 или точнее $1 можно удалить? |
подмаска из условия - это %1, а $1 - из текущего правила... вам виднее, что удалять...
|
Цитата:
Буду тестировать. |
Вложений: 1
В продолжение тестирования появился вопрос:
В какой последовательности лучше выставлять следующие директивы?: Не будет ли проблем с такой структурой? - боюсь мало ли что-то в директивах пересечется и потом боком выйдет # 01 SUBDOMEN REDIRECT перенаправление из site.com/sub1/ в sub1.site.com # 02 COOKIE если есть куки перенаправление в sub1.site.com или sub2.site.com # 03 Accept-Language перенаправление в зависимости от языка браузера # 04 NO-WWW удаление www перед доменами и субдоменами Полную версию приложил в аттаче (20-25строк) Спасибо. |
01 имхо лучше в конец, ибо самые первые дб внешние редиректы R... (остальное по сути не редиректы а перезапись урла url rewrite)...
|
Цитата:
|
первыми правилами лучше ставить внешние редиректы (где флаг R или полный урл в правиле)
|
Один из последних вопросов :/
В конце концов получилось подобное: Код:
# COOKIE 1. опятьже стоит ли ставить такую последовательность? - но это не главный... 2. подумываю - не будет ли правильно поставить в данный код некий переключатель который бы: куки есть - Accept-Language не читаем куов нет - Accept-Language читаем - стоит такое ставить или все нормально должно работать и так? Спасибо. |
и при запросе на http://site.ru/ будет вечный цикл (последнее правило без условия)...
Цитата:
Порядок не важен... если уж расставлять, то на основе вероятности (первым ставить наиболее вероятное)... |
Цитата:
Код:
#For every other language (including English :)) use English Так же ничего страшно не будет :) ? В будущем когда хостинг сменю думаю GeoIP прикрутить |
Время: 21:48. |
Время: 21:48.
© OSzone.net 2001-