全书目录

第十七篇:Nginx 完全指南 —— 城市总闸口宇宙

第八章:重写与重定向 —— 总闸口可以改路牌,也可以直接指路去新城

1 分钟 331 字 第 328 / 962 个阅读单元

Nginx 里最容易混淆的两个动作是:

  • 重定向:告诉客户端“你去另一个地址”
  • 重写:在闸口内部改 URI,再继续走内部流程

最简单、最推荐的重定向,通常用 return

nginx
server {
    listen 80;
    server_name example.com www.example.com;

    return 301 https://$host$request_uri;
}

这就像在城市总闸口挂了一个巨大路牌:

text
老入口 HTTP -> 一律指向 HTTPS 新入口

如果是简单路径跳转,也优先考虑 return

nginx
location = /old-docs {
    return 301 /docs;
}

rewrite 更像“内部改道”:

nginx
location / {
    rewrite ^/u/(.*)$ /users/$1 last;
    try_files $uri $uri/ =404;
}

它的意思大概是:

text
用户请求 /u/alice
总闸口内部改成 /users/alice
然后重新按新的 URI 再选 location

初学时你只要先记住这条朴素原则:

  • 简单跳转,用 return
  • 需要基于正则改 URI,再重新走匹配流程,用 rewrite

还有一个常见误区是过度使用 if
Nginx 的 if 不是通用编程语言里的 if。它主要处在 rewrite 模块语义里,能用 returntry_files、更清晰的 location 分流解决时,优先不用 if