nginx location 配置中 try_files, alias, root, index 的使用场合

更新日期: 2018-01-26 阅读次数: 13525 分类: Nginx

需求场景

朋友让我帮忙挂一个网页,有点类似“钓鱼”的性质(开玩笑,没这么严重),就是找一个类似的域名,把原网站其中一个网页完全复制过来,修改其中的内容,然后给甲方看。但是,这个新域名的其他 URL 都需要跳转到原域名。

假设,原域名为 a.com, 新域名为 b.com。规则是:

http://www.b.com/a/b.aspx?id=1024 显示“钓鱼”页,但是 http://www.b.com 需要 301 跳转到 http://www.a.com

解决方案

起初随手写了一套配置,怎么也满足不了需求,后来翻了一本关于 Nginx 的书,才有了思路。

配置如下

server {
        listen 80;
	server_name www.b.com;

        root /home/zhongwei/xxx/;

        location = /a/b.aspx {
                alias /home/zhongwei/xxx/;
                try_files index.html =404;
        }

        location /a/ {
                alias /home/zhongwei/xxx/;
        }

        location / {
                return 301 http://www.a.com$request_uri;
        }
}

alias 与 root 的区别

  • root 会将 location 匹配的路径缀在 root 参数的后面
  • alias 则是将 location 匹配的路径的目录部分,替换为 alias 的参数

单独加一条 /a/ 的规则

目的是,将资源文件的目录指向本地对应目录。

try_files 与 index 的区别

  • index 是处理请求路径结尾是 / 的情况。显然这里的 b.aspx 的请求不符合这个要求
  • 这里则是强制将请求指向本地的 index.html 文件

爱评论不评论