如何在NGINX中执行多次重定向

时间:2018-07-06 03:28:51

标签: nginx webserver

我正在制作我的第一个Nginx配置文件。我有2个目标:

  1. 将所有非“ www”请求重定向到“ www”版本
  2. 重定向曾经在ip地址文件夹的子目录中提供服务的所有流量

即:

mysite.com >>>“ www.mysite.com”

123.456.789.123/BETA >>>“ www.mysite.com”

这是我的配置:

    server {
            listen 80;
            listen 443 ssl;
            server_name 123.456.789.123;
            return 301 $scheme://www.mysite.com$request_uri;
    }
    server {
            listen 80;
            listen 443 ssl;
            server_name mysite.com;
            rewrite ^(.*)$ $scheme://www.mysite.com$1;
            location ~* ^/BETA/ {
                    return 301 /;
            }
    }

mysite.com >>>“ www.mysite.com”有效但 123.456.789.123/BETA >>>“ www.mysite.com”改为给出:“ www.mysite.com/BETA”

感觉我在这里做错了...应该有2个“服务器”块吗?如果是这样,我应该如何构造它以使用一个? “位置”是将子目录重写为根目录的正确方法吗?可能会导致与同一服务器块中的重写产生一些冲突?是否应该创建第3个服务器块以将子目录重写为根目录?有没有一种方法可以直接将123.456.789.123/BETA重写为www.mysite.com?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

摘自文档:https://www.nginx.com/blog/creating-nginx-rewrite-rules/

应该这样做,我修改了您的代码以将123.456.789.123/BETA重定向到www.mysite.com(只需删除$ request_uri以将请求发送到123.456.789.123/BETA)。对于123.456.789.123请求的其他任何页面,例如123.456.789.123/foo,都将重定向到www.mysite.com/foo。

server {
        listen 80;
        listen 443 ssl;
        server_name 123.456.789.123;
        location = /BETA {
                return 301 $scheme://www.mysite.com;
        }
        return 301 $scheme://www.mysite.com$request_uri;
}
server {
        listen 80;
        listen 443 ssl;
        server_name mysite.com;
        rewrite ^(.*)$ $scheme://www.mysite.com$1;
}

如果您还希望将/ BETA的子页面(例如/ BETA / foo)重定向到www.mysite.com,请在/ BETA之前删除该行中的'='。

编辑:不确定是否很清楚,但是您将需要一个具有server_name www.mysite.com的服务器块来实际为您的网站服务。