htaccess перенаправляет через несколько доменов, используя файлы cookie, чтобы все запомнить

У меня есть 2 сайта для клиента. Один — мобильный сайт, другой — обычный сайт. Они оба имеют отдельные URL-адреса.

Используя .htaccess, я уже заработал так, что если вы заходите с мобильного телефона, вы будете перенаправлены на мобильный сайт. Что я хотел бы сделать сейчас, так это иметь ссылку на мобильный сайт, которая вернет пользователя на обычный сайт. Этот параметр будет запомнен установленным файлом cookie.

И тут возникает проблема...

Я могу установить файл cookie для мобильного сайта, но когда он затем перенаправляется на обычный сайт, он не видит этот файл cookie из-за междоменного доступа и перенаправляет обратно на мобильный сайт.

Я пытаюсь быть умным и делаю размещение файла cookie динамическим в зависимости от домена, а при перенаправлении на обычный сайт также устанавливаю файл cookie, чтобы он не пытался перенаправить.

Вот код mod_rewrite, над которым я работаю. У меня сейчас болит голова из-за этого, поэтому, если бы кто-нибудь мог указать, где я ошибся, или если это вообще возможно, это было бы здорово.

# Write cookie if redirected
RewriteCond %{QUERY_STRING} (^|&)mredir=0(&|$)
RewriteRule ^ - [CO=mredir:0:%{HTTP_HOST}]

# redirect if mobile device && !mredir
RewriteCond %{HTTP_HOST} ^normalURL.com$ 
RewriteCond %{HTTP_COOKIE} !mredir=0
RewriteCond %{QUERY_STRING} !(^|&)mredir=0(&|$)
RewriteCond %{REQUEST_URI} !^/mobile/
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ http://mobileURL.com/ [R=302,QSA,L]

# point at mobile site IF !mredir
RewriteCond %{HTTP_HOST} ^mobileURL.com$
RewriteCond %{HTTP_COOKIE} !mredir=0
RewriteCond %{QUERY_STRING} !(^|&)mredir=0(&|$)
RewriteCond %{REQUEST_URI} !^/mobile/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_URI} ^/
RewriteRule ^(.*)$ mobile/$1 [L,QSA]

# IF mredir, redirect normal site
RewriteCond %{HTTP_HOST} ^mobileURL.com$
RewriteCond %{HTTP_COOKIE} mredir=0 [OR]
RewriteCond %{QUERY_STRING} (^|&)mredir=0(&|$)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_URI} ^/
RewriteRule ^(.*)$ http://normalURL.com?mredir=0 [L,QSA]

# point at normal site
RewriteCond %{HTTP_HOST} ^normalURL.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

person Doug McK    schedule 28.06.2011    source источник
comment
Я думаю, вам лучше попытаться понять это со стороны PHP, чем ломать себе голову .htaccess/mod_rewrite   -  person El Barto    schedule 22.02.2012
comment
Используете ли вы совершенно разные домены для мобильного и настольного сайта? Не только поддомены, такие как mobile.mysite.com и www.mysite.com?   -  person Seybsen    schedule 04.03.2012
comment
Да, это 2 отдельных URL: mysite.mobi и mysite.com. Из-за правил чтения междоменных файлов cookie невозможно сделать то, что я пытался сделать, поэтому я просто изменил приведенный выше сценарий, чтобы установить файл cookie на мобильном сайте, если пользователь запросил полную версию и выполнить перенаправление.   -  person Doug McK    schedule 05.03.2012


Ответы (1)


Я бы изменил ссылку на мобильном сайте, чтобы она не указывала на настоящую стартовую страницу обычного сайта. Вместо этого создайте страницу с именем, например. "номредир". При доступе к этой странице он должен установить файл cookie, который вы будете проверять, а затем он должен перенаправить пользователя на начальную страницу. Таким образом, вы получаете набор файлов cookie в соответствующем домене и только для тех пользователей, которые специально его запрашивают.

person Jenny D    schedule 07.05.2012