クライアント用に 2 つのサイトがあります。1 つはモバイル サイト、もう 1 つは通常のサイトです。これらは両方とも別々の 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]