我正在尝试重定向到该网站的“移动”版本,完成以下操作:
RewriteCond %{HTTP_USER_AGENT} "ipad|iphone|ipod" [NC]
RewriteCond %{HTTP_COOKIE} !^.*mobile.*$ [NC]
RewriteRule ^$ /?m=t [L,R=302,co=mobile:true:.domain.com]
RewriteCond %{HTTP_USER_AGENT} "ipad|iphone|ipod" [NC]
RewriteCond %{HTTP_COOKIE} ^.*mobile=true.*$ [NC]
RewriteCond %{QUERY_STRING} !(^|&)m=t(&|$) [NC]
RewriteRule ^$ /?m=t [L,R=302,co=mobile:true:.domain.com,QSA]
现在这适用于root。 但由于该网站严重依赖于重写,如果我修改
RewriteRule ^$ /?m=t [L,R=302,co=mobile:true:.domain.com,QSA]
到
RewriteRule ^(.*)$ /$1?m=t [L,R=302,co=mobile:true:.domain.com,QSA]
它会给我正确的重定向,但没有任何先前的重写。
所以,如果我之前说过重写
RewriteRule ^product/shimano$ /index.php?product_cat=shimano [L]
修改后的行会给我/index.php?m=t&product_cat=shimano而不是/ product / shimano?m = t
我错过了什么?我一直试图解决这个问题。
答案 0 :(得分:0)
首先尝试重定向,然后重写。也就是说,将这些移动检查规则放在重写之前。
这样,如果它是移动的,并且m = t不存在,它将执行302重定向并添加m = t。那将再次通过,跳过这些规则(因为m = t就在那里),并继续正常的重写。
我不完全确定上面的第一套规则。他们可能还需要来自第二组的那一行,即查询字符串检查m = t,以避免无限循环。基本上,如果它已经有m = t,那么它就不会再这样做了。