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。