2012-07-09 26 views
3

我試圖設置我的nginx將所有請求從移動設備重定向到/ mobile/$ uri 我想出了這個解決方案,但它似乎不起作用。這是一個語法問題還是對整個重定向概念的誤解。

if ($http_user_agent ~* '(iPhone|iPod|android|blackberry)') { 
    rewrite  ^(.*) http://xxxx.org/mobile/$1 permanent; 
} 

,當我用我的Android手機我得到像xxx.org/mobile/mobile/mobile/mobile ....

任何想法?有什麼建議?

回答

1
#initliaze mobile 
    set $mobile ""; 

    if ($request_uri !~* "^/mobile.*"){ 
     set $mobile Y; 
    } 
    if ($http_user_agent ~* (iPhone|iPod|android|blackberry)) { 
     set $mobile "${mobile}E"; 
    } 

    if ($http_referer !~* "xxx\.org"){ 
     set $mobile "${mobile}S"; 
    } 

    if ($host ~* "xxx\.org"){ 
     set $mobile "${mobile}S"; 
    } 

    if ($mobile = YESS){ 
     rewrite^$scheme://$host/mobile$request_uri ; 
    } 
7

,您應該使用不同的位置:

location/{ 
    if ($http_user_agent ~* '(iPhone|iPod|android|blackberry)') { 
     return 301 /mobile$request_uri; 
    } 
} 

location /mobile/ { 

} 

順便說一句,http://nginx.org/r/return

+0

移動位置應保持空嗎? – fenec 2012-07-09 15:04:25

+0

取決於您的需求。它可能是空的,因此會從父上下文繼承一些值。或者它可以包含您需要的任何配置以及任何嵌套的位置。 – VBart 2012-07-09 20:26:10

3

使用http://detectmobilebrowsers.com/它擁有所有的網絡服務器和客戶端/服務器端語言的腳本。

+0

我想檢測它是否是nginx配置中的移動設備 – fenec 2014-09-23 19:01:27

+0

謝謝,這個資源還包含nginx配置 – iMysak 2015-05-11 17:44:44