nginx: redirect mobile requests to /mobile/$uri

2020-06-18 04:01发布

I am trying to setup my nginx to redirect all the requests from mobile devices to /mobile/$uri i came up with this solution but it doesn't seem to work. Is it a syntax problem or a misunderstanding of the whole redirecting concept.

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

When i use my android phone i am getting something like xxx.org/mobile/mobile/mobile/mobile....

Any ideas?Any suggestions?

3条回答
疯言疯语
2楼-- · 2020-06-18 04:32

You should use different locations:

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

location /mobile/ {

}

btw, http://nginx.org/r/return

查看更多
唯我独甜
3楼-- · 2020-06-18 04:33

Use http://detectmobilebrowsers.com/ It has scripts for all webservers and client/server side languages.

查看更多
姐就是有狂的资本
4楼-- · 2020-06-18 04:39
    #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 ;
    }
查看更多
登录 后发表回答