nginx重定向301和302配置

1.重定向流程图


wechat_2025-09-24_145007_566.png

2.重定向实现的几种方法
2.1 return指令
return指令是nginx中简洁高效的重定向方式,支持直接返回状态码和目标url,性能最优。

# 基本301重定向例子
server {
    listen 80;
    server_name old-domain.com;
    return 301 https://new-domain.com$request_uri;  # $request_uri保留完整请求路径
}

# 带条件的302重定向
server {
    listen 80;
    server_name example.com;
    
    location /maintenance/ {
        return 302 /under-maintenance.html;  # 临时重定向到维护页面
    }
}

注:request_uri变量包含完整的请求URI(含参数),而uri仅包含路径部分。在永久重定向中建议使用$request_uri以保留完整请求信息。

2.2 rewrite模块
rewrite指令,强大的正则表达式,重定向通过正则表达式匹配URL,支持更复杂的重定向逻辑,由ngx_http_rewrite_module模块提供核心支持。

# 目录结构调整重定向
server {
    listen 80;
    server_name blog.example.com;
    
    # 将/posts/2025/调整为/articles/2025/
    rewrite ^/posts/(\d{4})/(.*)$ /articles/$1/$2 permanent;  # permanent等效于301
    
    # 临时重定向示例
    rewrite ^/temp/(.*)$ /$1 redirect;  # redirect等效于302
}

rewrite指令语法解析:

rewrite regex replacement [flag];

常用flag参数:
last:完成当前rewrite后停止处理后续规则
break:立即停止处理后续规则
redirect:返回302临时重定向
permanent:返回301永久重定向

2.3if条件判断
场景化重定向控制,通过if指令可以根据请求特征动态应用重定向规则,实现更精细化的控制逻辑。

server {
    listen 80;
    server_name example.com;
    
    # 根据浏览器类型重定向
    if ($http_user_agent ~* "MSIE [6-8]") {
        return 302 /ie-upgrade.html;  # 引导旧IE用户升级
    }
    
    # 根据请求参数重定向
    if ($arg_debug = "true") {
        rewrite ^ /debug/$request_uri break;  # 调试模式重定向
    }
}

注:过度使用if指令可能影响Nginx性能,复杂条件判断建议通过map指令或Lua模块实现。

2.4状态码重定向
通过error_page指令可以将特定状态码的响应重定向到指定页面,提升用户体验。

server {
    listen 80;
    server_name example.com;
    
    # 404页面重定向
    error_page 404 =301 https://example.com/not-found;
    
    # 403页面临时重定向
    error_page 403 =302 https://example.com/access-denied;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容