2

我正在尝试重定向到网站的“移动”版本,通过以下方式完成:

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]

现在这适用于根。但由于该网站严重依赖重写,如果我修改

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

我错过了什么?我一直试图弄清楚这一点。

4

1 回答 1

0

尝试先重定向,然后重写。也就是说,将这些移动检查规则放在重写之前。

这样,如果它是移动的,并且 m=t 不存在,它将执行 302 重定向并添加 m=t。然后会再次出现,跳过这些规则(因为 m=t 在那里),并继续进行正常的重写。

我不完全确定上面的第一组规则。他们可能还需要第二组中的那一行,用于查询字符串检查 m=t,以避免无限循环。基本上,如果它已经有 m=t,那么它就不会再这样做了。

于 2012-12-12T20:05:46.230 回答