You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx自定义301跳转页面失效,如何替换默认Nginx页面?

解决Nginx 301自定义页面不生效的问题

首先得搞清楚为什么你的自定义301页面没起作用:你当前用的return 301 https://$server_name$request_uri;是Nginx的快捷返回指令,它会直接生成包含默认Nginx页面的301响应,完全不会触发你配置的error_page 301规则,所以你的自定义页面根本没被加载。

下面给你两种可行的解决方案,选一种适合你的:

方案一:用rewrite替代return并调整error_page配置

这种方法不需要改动太多现有配置,只需要替换server块里的return指令,并微调error_page的规则:

  1. 先修改你的error_pages.conf里的301规则,加上状态码标记,确保Nginx返回301状态码的同时使用自定义页面:
error_page 301 =301 /error/301.html;
# 其他error_page配置保持不变...
  1. 把server块里的return 301 https://$server_name$request_uri;替换成rewrite指令:
server {
    listen 80;
    server_name ourhost.com;
    include /etc/nginx/snippets/error_pages.conf;

    # 用rewrite触发301跳转,同时让error_page生效
    rewrite ^ https://$server_name$request_uri? permanent;

    location ^~ /error/ {
        internal;
        root /usr/share/nginx/html;
        # 手动添加Location头,确保跳转正常
        add_header Location https://$server_name$request_uri;
    }
}

方案二:通过触发错误+自定义变量传递跳转地址

这种方法更灵活,适合需要统一管理跳转逻辑的场景:

  1. 修改error_pages.conf中的301规则和error location:
error_page 301 /error/301.html;
# 其他error_page配置保持不变...

location ^~ /error/ {
    internal;
    root /usr/share/nginx/html;
    # 返回301状态码,并从自定义变量获取跳转地址
    return 301 $redirect_url;
}
  1. 更新server块的配置,用自定义变量传递跳转地址并触发301错误:
server {
    listen 80;
    server_name ourhost.com;
    include /etc/nginx/snippets/error_pages.conf;

    # 定义跳转地址变量
    set $redirect_url https://$server_name$request_uri;
    # 触发301错误,让error_page接管响应
    return 301;
}

验证配置

修改完配置后,记得执行nginx -t检查配置是否合法,然后用systemctl reload nginx(或对应重启命令)生效配置。之后访问http://ourhost.com,就能看到自定义的301页面了,同时跳转功能正常,也不会暴露Nginx的信息。

内容的提问来源于stack exchange,提问作者orion3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:08:20