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

文章目录

    需求场景

    朋友让我帮忙挂一个网页,有点类似“钓鱼”的性质(开玩笑,没这么严重),就是找一个类似的域名,把原网站其中一个网页完全复制过来,修改其中的内容,然后给甲方看。但是,这个新域名的其他 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 文件

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式