插件窝 干货文章 如何使用Nginx进行HTTP请求的重定向和URL重写

如何使用Nginx进行HTTP请求的重定向和URL重写

重写 定向 server Nginx 223    来源:    2025-04-13

Nginx HTTP重定向与URL重写指南

Nginx提供了强大的重定向和URL重写功能,主要通过rewrite指令和return指令实现。下面我将详细介绍这些功能的用法。

一、HTTP重定向

1. 临时重定向(302)

server {
    listen 80;
    server_name example.com;

    location /old-url {
        return 302 http://example.com/new-url;
    }
}

2. 永久重定向(301)

server {
    listen 80;
    server_name example.com;

    location /old-page {
        return 301 http://example.com/new-page;
    }
}

3. 整个域名的重定向

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

二、URL重写

1. 基本重写

server {
    listen 80;
    server_name example.com;

    location /products {
        rewrite ^/products/(.*)$ /items/$1 last;
    }
}

2. 带条件的重写

server {
    listen 80;
    server_name example.com;

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

3. 重写规则标志

  • last - 停止处理当前重写规则,继续匹配其他location
  • break - 停止处理所有重写规则
  • redirect - 返回302临时重定向
  • permanent - 返回301永久重定向

三、常见应用场景

1. 强制HTTPS

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

2. 规范化URL(带/和不带/)

server {
    listen 80;
    server_name example.com;

    # 确保目录URL以/结尾
    rewrite ^([^.]*[^/])$ $1/ permanent;
}

3. 移除index.php

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

4. 美化URL

location / {
    rewrite ^/blog/(\d+)/(.*)$ /blog.php?id=$1&title=$2 last;
}

四、调试技巧

  1. 启用重写日志(在http或server块中添加):
rewrite_log on;
error_log /var/log/nginx/error.log notice;
  1. 使用curl -v测试重定向:
curl -v http://example.com/old-url

五、注意事项

  1. 尽量避免过多重定向,会影响性能
  2. 301重定向会被浏览器缓存,测试时使用302
  3. 复杂的重写规则可能会影响性能,尽量简化
  4. 使用try_files代替复杂的重写规则,如果可能

希望这些信息对您有所帮助!如需更具体的配置示例或有其他问题,请随时提问。