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]

変更された行により、/product/shimano?m=t の代わりに /index.php?m=t&product_cat=shimano が返されます。

私は何が欠けていますか?私はしばらくの間、これを理解しようとしてきました。

4

1 に答える 1

0

最初にリダイレクトしてから、書き換えてみてください。つまり、これらのモバイル チェック ルールを書き換えの前に置きます。

そうすれば、モバイルで m=t が存在しない場合、m=t が追加された 302 リダイレクトが実行されます。それは再び通過し、これらのルールをスキップして (m=t があるため)、通常の書き換えを続行します。

上記の最初の一連のルールについては完全にはわかりません。また、無限ループを回避するために、m=t のクエリ文字列チェックを行う 2 番目のセットの行が必要になる場合もあります。基本的に、既に m=t になっている場合は、再度実行することはありません。

于 2012-12-12T20:05:46.230 に答える