我正在编写一些代码,重定向到网站的移动版本,除非已经设置了cookie。
移动网站上有一个链接,"转到桌面网站"。它的目标是具有GET变量的桌面站点," noredirect = 1"。
以下是桌面网站上根.htaccess文件中的代码。它检查GET变量,然后设置一个cookie(如果存在),然后跳过下一个规则。
# Check if this is the noredirect query string
RewriteCond %{QUERY_STRING} (^|&)noredirect=1(&|$)
# Set a cookie to say we want to stay on the desktop site
# and skip the next rule so
# that the below mobile rule does not redirect
# (cookie cannot be set AND read in one request)
RewriteRule ^ - [CO=mredir:1:%{HTTP_HOST},S=1]
跳过标志似乎不起作用。在这段代码下面,我有一些RewriteConds和一个RewriteRule:
# Check to make sure we haven't set the cookie before
RewriteCond %{HTTP:Cookie} !\smredir=1(;|$)
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera|mobile|palmos|webos|googlebot-mobile" [NC,OR]
RewriteCond %{HTTP:Profile} !^$
RewriteCond %{HTTP_HOST} ^(?:www\.)?((?!www\.)[^.]+)\.([^.]+\.[^.]+)$ [NC]
RewriteRule ^$ http://m.%1.%2 [L,R]
当下一条规则前面有条件时,跳过标志是否仍然有效?
另外,我的主要问题是:跳过标记的语法是否正确,是否可以在设置cookie的同一行中完成?
我已尝试过这两种组合:
RewriteRule ^ - [CO=mredir:1:%{HTTP_HOST},S=1]
和
RewriteRule ^ - [CO=mredir:1:%{HTTP_HOST}] [S=1]
既不会出现任何错误,但跳过标记仍无效。
帮助将不胜感激,谢谢。
答案 0 :(得分:1)
有关如何解决此问题的一般提示,请参阅我的Tips for debugging .htaccess rewrite rules。您还需要区分响应cookie(输出)和请求cookie(输入)。 CO标志设置了响应cookie,但在当前传递中%{HTTP:Cookie}
中不一定可见。正确使用跳过链或者也设置环境变量并使用它,因为它立即可见。