2012-12-12 157 views
2

後,我試圖重定向到「移動」版本的網站,通過以下完成:Apache的重定向重寫規則

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 =禧瑪諾而不是/產品/禧瑪諾?m = T

我錯過了什麼?我一直試圖弄清楚這一點。

回答

0

先嚐試重定向,然後重寫。也就是說,將這些移動檢查規則放在重寫前面。

這樣,如果它是移動的,並且m = t不存在,那麼它將執行添加了m = t的302重定向。然後,這將再次通過,跳過這些規則(因爲m = t在那裏),並繼續正常的重寫。我不完全確定上面的第一組規則。他們可能還需要第二組中的那條線,這是查詢字符串檢查m = t,以避免無限循環。基本上,如果它已經有m = t,那麼它不會再做。