Redirect nginx中的重定向

Redirect nginx中的重定向,redirect,nginx,Redirect,Nginx,我对nginx非常陌生,在配置简单重定向时遇到了麻烦。 下面是我非常简单的配置文件: server { listen 80 default_server; set $mobile "false"; if ($http_user_agent ~* '(phone|droid)') { set $mobile "true"; } if ($mobile = true) { return 301 http://X.X.X.X

我对nginx非常陌生,在配置简单重定向时遇到了麻烦。 下面是我非常简单的配置文件:

server {
    listen 80 default_server;

    set $mobile "false";

    if ($http_user_agent ~* '(phone|droid)') {
        set $mobile "true";
    }

    if ($mobile = true) {
        return 301 http://X.X.X.X/mobile$request_uri;
    }

    location /mobile {
        include uwsgi_params;
        uwsgi_pass unix:/var/www/video_m/video.sock;
    }

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/var/www/video/video.sock;
    }
}
当从桌面转到站点时,一切正常,我的请求将发送到uwsgi。 但在移动设备上,我从浏览器中得到一个错误ERR_TOO_许多重定向和请求url看起来像


很明显,我遗漏了一些基本的、可能非常简单的东西。请帮帮我。

您已经创建了一个循环。第一次点击
if/return
时,添加了
/mobile
前缀。然后,URI再次出现,并在同一语句中添加另一个
/mobile
前缀,这将继续重复

要中断循环,您需要在第一次添加
/mobile
前缀后不采用的路径中保护
if/return

也许:

server {
    listen 80 default_server;

    location /mobile {
        include uwsgi_params;
        uwsgi_pass unix:/var/www/video_m/video.sock;
    }

    location / {
        if ($http_user_agent ~* '(phone|droid)') {
            return 301 $scheme://$host/mobile$request_uri;
        }

        include uwsgi_params;
        uwsgi_pass unix:/var/www/video/video.sock;
    }
}

试试“打破”在if块中-刚好低于设置的$mobile“true”;这对我不起作用。我仍然得到重定向循环。谢谢。我不知道在添加前缀后,请求从一开始就再次计算。