nginx重定向URI之rewrite和alias

    xiaoxiao2023-10-17  157

    未经允许不得转载!最近发现有博主转载我的文章,并没有跟我打招呼,也没有注明出处!!!!

    熟悉Nginx的同学都知道Nginx可以用来做负载均衡和反向代理,非常好用。做前后端分离也是非常的方便。今天我们就来说一下,用Nginx做前后端分离时如何做URI重定向?

    什么是URI重定向?

    就是说访问某一个或者某一规则URI时由Nginx的配置来决定重定向到另外一个或一类URI。

    有啥用呢?

    其中一个作用就是可以将请求映射到真实目录。具体啥意思呢?

    比如我们的URL是

    http://www.abc.com/ITwalking/page/index.html

    而index.html在我们的系统目录

    D:/resources/ITwalking/page/下

    这时我们可以这样配置location:

    location /ITwalking { root D:/resources/; }

    用root这种方式配置的话,location后面的ITwalking是作为系统目录的,

    即D:/resources/下要有/ITwalking/page这层目录。

    这种配置是没问题的。

    但假如我们的D:/resources/下直接就是page,

    然后下面直接就是文件呢,中间没

    有/ITwalking这层目录,怎么办呢?你可能会想,新建个ITwalking把page及其中的文件移动到里面,然后用上面的配置不就可以了吗。

    可以,但没必要!

    非常没必要,因为我们的resources/page目录可能是从git上clone的,如果我们新建目录移动进去,那我们是不是修改了本地git仓库,那我们提交代码或更新时咋办?再移出去?多麻烦啊。(因为我们请求后台必须要加/ITwalking的)

    为了解决这个问题,我们可以用 Nginx 的 alias 指令或者 rewrite 指令。

    1、alias指令用来重置当前文件的目录,lacation后面的是虚拟目录

    location /ITwalking/ { #使用 nginx alias 指令 alias D:/resources/page/; }

    这样,当URL为

    http://www.abc.com/ITwalking/page/index.html时,

    会将此请求重定向到

    D:/resources/page/index.html

    此时的ITwalking是虚拟目录,对此目录的访问重置到

    D:/resources/page/

    2、rewrite重定向,需要配合root指令一起使用

    location /ITwalking/ { root D:/resources/page/; #使用 nginx rewrite 指令 rewrite ^/ITwalking/(.*?)$ /$1 break; }

    这两种效果是一样的。^/ITwalking/(.*?)$是正则,表示满足这个正则的请求,都重定向到D:/resources/page/下,/$1重定向的地址,break终止匹配。

    rewrite是针对http请求的,它里面的路径是网址里面的地址,rewrite做的是地址间的转换。 而root和alias是系统文件路径的设置。 区别是,root用来设置根目录,而alias用来重置当前文件的目录。

    关于rewrite和alias重定向的例子先说到这,这也是我实际遇到的,这两种方式完美的满足了我的需求。

    二者的详细用法,后续的文章会详细讲解。

    文章首发于公众号:编程大道 以及我的个人网站https://itwalking.top/

    最新回复(0)