Nginx配置中rewrite规则常见写法

2025.7.18 杂七杂八 1555
33BLOG智能摘要
Nginx配置中的rewrite规则是实现URL重写和跳转的重要工具,常见于HTTPS强制跳转、SEO友好的URL美化和域名重定向等场景。其基本语法为“rewrite regex replacement [flag];”,由正则匹配表达式、替换路径和标志位组成。标志位如permanent用于实现301永久跳转,last则表示继续匹配其他规则,使用不当可能引发无限循环等问题。同时,rewrite可与if语句配合使用,但官方建议谨慎使用if,以避免影响性能。在处理多级rewrite时,要注意规则的执行顺序和标志位的设置,避免出现配置错误。调试过程中,建议开启rewrite日志,先在测试环境验证效果,再逐步推送到生产环境,并提前准备回滚方案以确保配置错误时能快速恢复。虽然rewrite规则初学时容易出错,但熟练使用后能显著提升网站配置的灵活性和可维护性。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

Nginx rewrite规则:从入门到放弃再到真香

Nginx配置中rewrite规则常见写法

大家好,我是33blog的技术博主。今天想和大家聊聊Nginx配置中那些让人又爱又恨的rewrite规则。说实话,刚开始接触rewrite的时候,我经常被各种正则表达式绕得头晕眼花,甚至一度想放弃。但经过多次踩坑和实践后,我发现rewrite规则其实是个超级实用的功能。

rewrite基础语法

首先来看最基本的rewrite语法格式:

rewrite regex replacement [flag];

这个简单的三部分结构,却可以玩出各种花样。记得我第一次使用时,把正则表达式写错了,结果导致整个网站404,吓得我赶紧回滚配置。

常见rewrite场景

1. 强制HTTPS跳转

现在基本所有网站都要上HTTPS了,这个rewrite规则可以说是标配:

rewrite ^(.*)$ https://$host$1 permanent;

我第一次配置时漏掉了permanent标志,结果浏览器缓存了错误的跳转,导致用户访问异常。这个教训让我记住了flag的重要性。

2. 美化URL

把动态URL转成伪静态,对SEO很友好:

rewrite ^/article/(d+)$ /article.php?id=$1 last;

这里要注意last标志表示停止处理当前rewrite规则,继续匹配其他location。我曾经因为用错flag导致无限循环,Nginx直接报错。

3. 域名重定向

网站改版换域名时特别有用:

rewrite ^/(.*)$ http://newdomain.com/$1 permanent;

高级技巧

1. 条件判断

Nginx的if语句可以和rewrite配合使用:

if ($host != 'www.33blog.com') {
    rewrite ^(.*)$ http://www.33blog.com$1 permanent;
}

注意:if语句在Nginx中被称为”邪恶的if”,使用不当会影响性能,建议只在确实需要时使用。

2. 多级rewrite

有时候需要多个rewrite规则配合:

rewrite ^/old-path/(.*)$ /new-path/$1;
rewrite ^/new-path/(.*)$ /final-path/$1 last;

这种链式rewrite要特别注意flag的使用顺序,我曾在生产环境因为这个问题调试了整整一个下午。

调试技巧

分享几个我总结的调试经验:

  • 使用rewrite_log on;开启rewrite日志
  • 先在小范围测试,确认无误再应用到生产环境
  • 善用return 302临时跳转进行测试
  • 准备回滚方案,配置出错时能快速恢复

最后想说,rewrite规则虽然看起来简单,但实际使用时有很多细节需要注意。希望我的这些经验能帮你少走些弯路。如果你有更好的rewrite技巧,欢迎在评论区分享!

评论

  • 大佬这文章太实用了!正好最近被rewrite搞到头大,看完感觉清晰多了👍

  • 请问下rewrite_log的日志文件默认放在哪里啊?找了半天没找到

  • 真实了!第一次配rewrite的时候把整个网站搞崩了,吓得我连夜删配置😂