插件窝 干货文章 nginx rewrite如何实现URL跳转

nginx rewrite如何实现URL跳转

rewrite Nginx 重写 server 728    来源:    2025-04-21

Nginx URL重写(rewrite)实现跳转指南

Nginx的rewrite模块提供了强大的URL重写和跳转功能,可以通过多种方式实现URL跳转。以下是几种常见的实现方式:

1. 基本rewrite指令

server {
    listen 80;
    server_name example.com;

    # 永久重定向(301)
    rewrite ^/old-url$ /new-url permanent;

    # 临时重定向(302)
    rewrite ^/temp-url$ /new-url redirect;
}

2. 使用location块中的rewrite

location /products {
    # 将/products/123跳转到/item?id=123
    rewrite ^/products/(\d+)$ /item?id=$1 last;
}

3. 常见跳转场景

3.1 HTTP跳转到HTTPS

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

3.2 非www跳转到www

server {
    listen 80;
    server_name example.com;
    return 301 http://www.example.com$request_uri;
}

3.3 目录尾部添加斜杠

rewrite ^([^.]*[^/])$ $1/ permanent;

3.4 旧域名跳转到新域名

server {
    listen 80;
    server_name old.com;
    return 301 http://new.com$request_uri;
}

4. rewrite指令参数说明

  • last - 停止处理当前rewrite指令集,并开始搜索匹配新URI的location
  • break - 停止处理当前rewrite指令集
  • redirect - 返回302临时重定向
  • permanent - 返回301永久重定向

5. 条件判断跳转

# 根据浏览器类型跳转
if ($http_user_agent ~* "MSIE") {
    rewrite ^(.*)$ /ie-version/$1 break;
}

# 根据查询参数跳转
if ($args ~* "id=([0-9]+)") {
    rewrite ^/item$ /product/%1? permanent;
}

6. 高级示例

# 将多个旧URL模式重写到新URL
rewrite ^/shop/(.*)/category/(.*)$ /$1/$2 permanent;

# 带参数的复杂重写
rewrite ^/download/(.*)/version/(.*)/file/(.*)$ /dl.php?product=$1&ver=$2&file=$3? last;

注意事项

  1. 尽量使用return指令进行简单跳转,效率更高
  2. 避免过多的rewrite规则,影响性能
  3. 测试时先使用302跳转,确认无误后再改为301
  4. 使用rewrite_log on;可以开启重写日志,方便调试

通过合理使用Nginx的rewrite功能,可以实现各种复杂的URL跳转需求。