alias指令本质是服务端路径替换而非HTTP跳转:它移除location匹配前缀后,将剩余URI拼接到alias指定路径,实现静态资源映射;需严格对齐末尾斜杠,不支持if块和正则直用,且index指令在alias下无效。

用 alias 指令重定向请求路径,本质不是“跳转”,而是把 URL 路径精准替换成磁盘上的另一个位置——它不发 HTTP 重定向,也不改浏览器地址栏,只在服务端悄悄换掉文件查找路径。
alias 是“替换”,不是“拼接”
root 把整个请求 URI(比如 /static/js/app.js)直接加到指定目录后;alias 则先砍掉 location 匹配的部分(如 /static/),再把剩下的路径(js/app.js)拼到 alias 值后面。
- location /static/ { alias /var/www/dist/; } → 请求 /static/js/app.js 查找 /var/www/dist/js/app.js
- location /api/ { alias /opt/backend/public/; } → 请求 /api/v1/users.json 查找 /opt/backend/public/v1/users.json
必须注意斜杠一致性
location 和 alias 的末尾斜杠要对齐,否则路径会错位甚至 404。
- location /files/ 必须配 alias /data/storage/(都带 /)
- location /logo.png 可配 alias /var/www/images/logo.png(指向具体文件,alias 不加 /)
- 写成 location /files { alias /data/storage/; } 可能只截掉 /files 字符串,导致 /data/storage/abc.txt 被误查为 /data/storage/abc.txt(但本意是 /data/storage/abc.txt)
搭配正则实现动态映射
alias 本身不支持正则,但可以和正则 location 配合,用捕获组构造真实路径。
- location ~ ^/v(\d+)/static/(.+)$ { alias /opt/app/v$1/assets/$2; }
- 访问 /v2/static/css/main.css → 映射到 /opt/app/v2/assets/css/main.css
- 注意:正则中用 + 或 +? 避免捕获空值,alias 值结尾不加 /(因为 $2 已含完整路径)
常见配合动作不能少
单纯 alias 只管找文件,实际使用常需额外配置:
- 静态资源:加 expires、Cache-Control 头提升缓存效率
- 前端 SPA:配合 try_files $uri $uri/ /index.html; 实现 history 路由回退(注意 alias 下慎用 try_files,建议优先用 root + try_files)
- PHP 子应用:必须显式设置 fastcgi_param SCRIPT_FILENAME,不能依赖 $document_root
- 权限检查:确保 Nginx worker 用户对 alias 目录有 r-x 权限(目录必须有 x 才能进入)


















