'return 404;' 不尊重 Nginx 中的自定义错误页面设置

'return 404;' 不尊重 Nginx 中的自定义错误页面设置

Nginx大多数情况下,我使用服务器块中的全局设置来设置自定义 404 页面error_page,但是,如果我在位置块内执行以下操作:

if ($uri ~* ...) {return 404;}

然后Nginx返回默认的 404 页面。

在这种情况下有没有办法返回自定义页面?

更新:目前我有类似的东西

server {
    ...
    error_page    404    /html/error/404.html;
    ...
    root           /home/www-data/mysite/static;

    location ^~ /blah/blah/ {
        if ($uri ~* ...) { return 404; }
        ...
    }

    location ^~ /html/error/ {
        internal;
    }
}

答案1

不要直接返回 404,而是使用:

error_page 404 /404.html;
location / {
            try_files $uri =404;
}

这将生成 404 http 状态代码和自定义 404 错误页面。希望这对您有所帮助。

答案2

“/html/error” 不应该同时位于根路径(绝对路径)和 error_path(相对路径)中。

文档根目录在哪里?当有一个 'html/' 子目录时,它真的是 '/home/www-data/mysite/static' 吗?你确定根目录不应该是 '/home/www-data/mysite/static/html' 吗?

~* 匹配右侧的模式是什么?你可能遇到了正则表达式错误,导致它匹配所有内容。

或者,根目录可能有误,并且 nginx 可能返回 404,因为它找不到文件,而不是因为“if”模式匹配。

默认情况下,nginx 错误日志将记录 nginx 尝试访问的实际文件系统路径,该路径用于由于文件丢失而返回 404 的请求。如果这些错误未显示在错误日志中,请参阅 nginx 文档中的 log_not_found 和 error_log。

相关内容