nginx 利用 error_page 实现自定义 404 跳转

error_page

以下内容,摘抄翻译自官网

  • 语法格式 - error_page code ... [=[response]] uri;
  • 上下文 - http, server, location, if in location

指定错误代码的 url 路径

error_page 404             /404.html;
error_page 500 502 503 504 /50x.html;

使用 =response 来更改状态码

error_page 404 =200 /empty.gif;

使用 URL 重定向

error_page 403      http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;

开始搞事情

创建一个 404 文件

记住自己创建的文件在什么路径,比如我创建的路径是:/usr/local/openresty/nginx/html-error-page

<html>
<head>
    <meta charset="UTF-8">
</head>
<head>
    <title>404 Not Found</title></head>
<body>
<center>
    <h1>你瞅啥</h1>
</center>
<hr>
</body>
</html>

配置 conf 文件

  • error_page 可以在任何模块内使用,具体的场景,以自己的实际诉求为准
    • http 模块相当于全局模块,所有 server 模块内的虚拟主机都可以适用
    • server 模块仅对当前的虚拟主机适用
    • location 模块仅对当前规则生效
    • if in location 属于套娃行为,在 location 内嵌套了一层 location
# 自定义 Server 字段请求头,不配置的情况下,默认是当前 web 服务器的版本
## 比如 openresty/1.15.8.2
more_set_headers 'Server: 你瞅啥';

server {
    listen       80;
    server_name  localhost;
    # 修改状态码为 200,并且指定到 /404.html 这个路径
    error_page 404 =200 /404.html;
    # 通过绝对匹配 /404.html 这个路径
    location = /404.html {
        # /404.html 需要通过配置 root 来指定 html 文件的路径
        ## 否则会找默认的路径,找不到就会返回默认的 404 文件,而不是自定义的 404 文件
        root   /usr/local/openresty/nginx/html-error-page;
        index  index.html index.htm 404.html;
    }
}

通过 CURL 命令验证

查看返回的状态码

我的配置文件就上面这一段,所以肯定不存在 /api 这个路径

curl -I localhost/api

返回的内容如下,可以看到,状态码是 200,但是有一个前提,那就是 /404.html 这个文件被找到了,如果 /404.html 这个文件找不到,返回的状态码还是 404

HTTP/1.1 200 OK
Date: Sun, 24 Dec 2023 13:27:20 GMT
Content-Type: text/html
Content-Length: 166
Last-Modified: Sun, 24 Dec 2023 12:59:19 GMT
Connection: keep-alive
ETag: "65882b27-a6"
Server: 你瞅啥
Accept-Ranges: bytes

当然,也可以浏览器访问一下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值