Ошибка перенаправления в субдоменах

Аватара пользователя
blacks2

Ошибка перенаправления в субдоменах

Сообщение blacks2 »

Ищутся добрые люди готовые помочь!



3и или 4е сутки не могу собрать следу штуку :





ЗАДАЧА:

При заходе на site.spb.ru по установленным кукам посетитель перенаправлялся

на один из субдоменов и там оставался. Позже добавить на весь сайт редиект

«с www» на «без www».





ПОДРОБНЕЙ:

Пользователь заходит на site.spb.ru

В корне сайта лежит htaccess





Код:

Код: Выделить всё

RewriteEngine On
RewriteBase /
# субдомены – построены по правилам моего хостера
	RewriteCond %{HTTP_HOST} (www\.)?sub1\.site.\spb\.ru$
	RewriteCond %{REQUEST_URI} !^(/)? sub1/
	RewriteRule ^(.*)$ sub1/$1
	RewriteCond %{HTTP_HOST} (www\.)? sub2\.site.\spb\.ru$
	RewriteCond %{REQUEST_URI} !^(/)? sub2/
	RewriteRule ^(.*)$ sub2/$1
# прочитать значение куки и перенаправить на субдомен указанный в куки
	RewriteCond %{HTTP_COOKIE} setting=([^;]+) [NC]
	RewriteRule ^(.*)$ http://%1.site.spb.ru/ [R=302,QSA,L]



1. Если куки установлены то в зависимости от них идет перенаправление на

sub1.site.spb.ru или sub2.site.spb.ru



2. Если куков нет то ждется переход от пользователя на sub1.site.spb.ru или sub2.site.spb.ru

Где и ставятся куки.







ПРОБЛЕМА:

Редирект по куки на на субдомены идет но с ошибкой:



«Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.»

«Эта проблема может возникать при отключении или запрещении принятия cookies.»[/i]





Все вышесказанное работает на

виртуальном хостинге, 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 весь пример.



Помогите пожалуйста!
Аватара пользователя
Sham

Re: Ошибка перенаправления в субдоменах

Сообщение Sham »

если кукис отсылается с каждым запросом, то у вас вечный редирект будет... нужно добавить дополнительную проверку (нпр по %{HTTP_HOST}), и уточнить, на какой домен ставится кукис (может на все субдомены)...

реферер может и не отсылаться вовсе (регулируется в браузере), впрочем, как и кукисы...


Цитата blacks2:



RewriteCond %{HTTP_HOST} (www\.)? sub2\. site.\spb\.ru$

RewriteCond %{REQUEST_URI} !^(/)? sub2/
Ошибка перенаправления в субдоменах




уберите лишние пробелы из условий, и экранируйте спец-символы
Аватара пользователя
blacks2

Re: Ошибка перенаправления в субдоменах

Сообщение blacks2 »

Цитата Sham:



если кукис отсылается с каждым запросом, то у вас вечный редирект будет... нужно добавить дополнительную проверку (нпр по %{HTTP_HOST}), и уточнить, на какой домен ставится кукис (может на все субдомены)...

реферер может и не отсылаться вовсе (регулируется в браузере), впрочем, как и кукисы...



Спасибо!



Кукис ставится на только на корень сайта

Ставится из субдоменов

Подскажите пожалуйста код для проверки

(пробавал по совету одного хорошего человека с другого форума поставить

RewriteCond %{HTTP_HOST} !^(en|ru) [NC] но не помогло Изображение
)




Цитата Sham:



уберите лишние пробелы из условий, и экранируйте спец-символы



пробелы появились случайно во время поста.

в оригинале их нет. пост исправлю.



Что еще необходимо экранировать?
Аватара пользователя
blacks2

Re: Ошибка перенаправления в субдоменах

Сообщение blacks2 »

Код:

Код: Выделить всё

	RewriteCond %{HTTP_HOST} ^www\.(ru|en)\.site\.spb\.ru [NC]
	RewriteRule ^(.*)$ http://%1.site.spb.ru/$1 [R,L]

При заходе на

http://www.ru.site.spb.ru/


идет переход на

http://ru.justplan.spb.ru/ru//




Удалил в второй строке /$1 переход идет на
http://ru.justplan.spb.ru/
- как и нужно...



Но мне кажется или нет что /$1 удалять неправильно?
Аватара пользователя
Sham

Re: Ошибка перенаправления в субдоменах

Сообщение Sham »

Спасибо. Сегодня ночью как проснусь проверю код.







Код:

Код: Выделить всё

RewriteCond %{HTTP_HOST} !^(www\.)?sub[12]\.site\.spb\.ru$

- в этой строке не должно стоять разелителя между 1 и два ?

- навроде (en|ru)






Цитата Sham:



вообще тут использование куков непонятно (в зависимости от чего ставятся куки, и на домен какого уровня)



- куки ставятся в зависимости захода в тот или иной sub1 / sub2

- ставятся на корень сайта - там где лежит htaccess который и перенаправляет...
Аватара пользователя
blacks2

Re: Ошибка перенаправления в субдоменах

Сообщение blacks2 »

Цитата blacks2:



в этой строке не должно стоять разелителя между 1 и два ?
Ошибка перенаправления в субдоменах




это символьный класс


Цитата blacks2:



ставятся на корень сайта
Ошибка перенаправления в субдоменах




кукисы на домен ставятся... и браузер при запросе на конкретный домен шлет те кукисы, которые записаны на этот домен/субдомены (не важно какого уровня).

разберитесь с матчастью...
Аватара пользователя
Sham

Re: Ошибка перенаправления в субдоменах

Сообщение Sham »

т.е. если в наличии кука setting и НЕ субдомен sub1-2 то редиректим на субдомен 4 уровня





Код:

Код: Выделить всё

RewriteCond %{HTTP_COOKIE} setting\=([^\;]+) [NC]
RewriteCond %{HTTP_HOST} !^(www\.)?sub[12]\.site\.spb\.ru$
RewriteRule . http://%1.site.spb.ru/ [R,QSA,L]

или если нужно условие, что при наличии куки setting хост должен быть site.spb.ru (без sub1-2)





Код:

Код: Выделить всё

RewriteCond %{HTTP_COOKIE} setting\=([^\;]+) [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?site\.spb\.ru$
RewriteRule . http://%1.site.spb.ru/ [R,QSA,L]

если куки не шлются, то редиректа не будет



вообще тут использование куков непонятно (в зависимости от чего ставятся куки, и на домен какого уровня)
Аватара пользователя
blacks2

Re: Ошибка перенаправления в субдоменах

Сообщение blacks2 »

Цитата blacks2:



Тоесть в случае с именами а не цифрами всетаки разделитель необходимо поставить?
Ошибка перенаправления в субдоменах




ну да, типа

Код:

Код: Выделить всё

!^(www\.)?(en|ru)\.site\.spb\.ru$

если нужно редиректить в зависимости от языка браузера, так и скажите...
Аватара пользователя
Sham

Re: Ошибка перенаправления в субдоменах

Сообщение Sham »

Српасибо.




Цитата Sham:



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



Эх... если бы Изображение

Для редиректа в зависимости от языка браузера есть вроде как специальная директива

Даже "калькулятор htaccess" в нете видел который строет такое перенаправление.

2 или 3 строки.



Задача в том что

Пользователь один раз зайдет с site.spb.ru на ru.site.spb.ru и ему запишутся куки

И в следующий раз заходя на site.spb.ru будет перенаправление по куки на ru.site.spb.ru



Только что-то заело Изображение

Буду пробовать ваше предложение сегодня ночью Изображение
Аватара пользователя
blacks2

Re: Ошибка перенаправления в субдоменах

Сообщение blacks2 »

Цитата blacks2:



Пользователь один раз зайдет с site.spb.ru на ru.site.spb.ru и ему запишутся куки

И в следующий раз заходя на site.spb.ru будет перенаправление по куки на ru.site.spb.ru
Ошибка перенаправления в субдоменах




в этом случае кукис нужно ставить на домен site.spb.ru, иначе по дефолту запишется на ru.site.spb.ru и ваш вариант не прокатит....



кукис можно через флаг в правиле поставить...
Ответить

Вернуться в «Вебмастеру»