插件窝 干货文章 nginx中如何重定向

nginx中如何重定向

定向 Nginx server example 261    来源:    2025-04-05

Nginx 重定向配置指南

在 Nginx 中实现重定向有多种方法,下面我将详细介绍几种常见的重定向方式及其配置方法。

1. 永久重定向 (301) 和临时重定向 (302)

301 永久重定向

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

302 临时重定向

server {
    listen 80;
    server_name tempdomain.com;
    return 302 http://maindomain.com$request_uri;
}

2. 基于路径的重定向

重定向特定路径

location /oldpath/ {
    return 301 http://example.com/newpath/;
}

保留查询参数

location /search {
    return 301 http://example.com/newsearch$is_args$args;
}

3. 非 www 重定向到 www (或反之)

www 重定向到非 www

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

非 www 重定向到 www

server {
    server_name example.com;
    return 301 $scheme://www.example.com$request_uri;
}

4. HTTP 重定向到 HTTPS

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

5. 使用 rewrite 指令

server {
    rewrite ^/oldurl$ /newurl permanent;  # 301 重定向
    rewrite ^/tempurl$ /newurl redirect;  # 302 重定向
}

6. 基于条件的重定向

根据用户代理重定向

if ($http_user_agent ~* "bot") {
    rewrite ^(.*)$ /bot-page$1 last;
}

根据 IP 地址重定向

if ($remote_addr = 192.168.1.100) {
    rewrite ^(.*)$ /special-page$1 last;
}

7. 重定向整个目录

location /old-dir/ {
    rewrite ^/old-dir/(.*)$ /new-dir/$1 permanent;
}

注意事项

  1. 尽量使用 return 指令而不是 rewrite,因为它更高效
  2. 301 重定向会被浏览器缓存,测试时可以使用 302
  3. 修改配置后记得测试并重载 Nginx: sudo nginx -t sudo systemctl reload nginx
  4. 使用 $scheme 变量可以自动匹配 http 或 https
  5. 对于复杂的重定向逻辑,考虑使用 map 指令

希望这些配置示例能帮助您实现所需的 Nginx 重定向功能!