插件窝 干货文章 nginx rewrite功能如何使用

nginx rewrite功能如何使用

Rewrite Nginx 重写 定向 38    来源:    2025-04-24

Nginx Rewrite 功能使用指南

Nginx 的 rewrite 功能是 URL 重写和重定向的强大工具,可以用于修改请求 URI、实现 URL 美化、处理旧链接重定向等场景。

基本语法

Nginx 的 rewrite 指令基本语法如下:

rewrite regex replacement [flag];
  • regex: 正则表达式,用于匹配请求的 URI
  • replacement: 替换字符串,匹配成功后将被替换的字符串
  • flag: 可选标志位,控制重写行为

常用 flag 标志

  1. last: 停止处理当前 rewrite 规则,并用修改后的 URI 重新搜索 location
  2. break: 停止处理当前 rewrite 规则,不再搜索其他规则
  3. redirect: 返回 302 临时重定向
  4. permanent: 返回 301 永久重定向

常见使用场景

1. 基本重写

rewrite ^/oldpath$ /newpath;

2. 带参数重写

rewrite ^/users/(.*)$ /show?user=$1? last;

3. 文件扩展名重写

rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;

4. 域名重定向

server {
    listen 80;
    server_name olddomain.com;
    rewrite ^(.*)$ http://newdomain.com$1 permanent;
}

5. 强制 HTTPS

if ($scheme != "https") {
    rewrite ^ https://$host$uri permanent;
}

6. 移除 index.php

rewrite ^/(.*)/index\.php$ /$1 permanent;

在 location 中使用

location /images/ {
    rewrite ^/images/(.*)$ /pics/$1 break;
}

条件重写

if ($http_user_agent ~* "MSIE") {
    rewrite ^(.*)$ /ie/$1 break;
}

注意事项

  1. 正则表达式中的捕获组可以通过 $1, $2 等在替换字符串中引用
  2. 过多的 rewrite 规则会影响性能,应尽量简化
  3. 使用 permanentredirect 时,替换字符串必须是完整 URL
  4. 在 server 上下文中,rewrite 规则会在 location 处理前执行

调试技巧

  1. 使用 return 200 "message"; 测试 rewrite 规则是否匹配
  2. 检查 Nginx 错误日志获取 rewrite 处理信息
  3. 使用 rewrite_log on; 开启 rewrite 日志(需要 debug 日志级别)

通过合理使用 rewrite 功能,可以有效地管理网站 URL 结构,实现新旧 URL 的平滑过渡,提升用户体验和 SEO 效果。