我在Nginx使用全局error_page设置在服务器块中设置了我的自定义404页面,但是,如果我在位置块内执行以下操作:
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; } }
而不是直接返回404,而是使用:
error_page 404 /404.html; location / { try_files $uri =404; }
这将产生404 http状态码与自定义404错误页面。 希望这可以帮助。
“/ html / error”不应该在根(绝对)和error_path(相对)path中。
文档根在哪里? 当它有一个“html /”子目录时,它真的是“/ home / www-data / mysite / static”吗? 你确定root不应该是'/ home / www-data / mysite / static / html'吗?
〜*匹配的右侧是什么模式? 你可能有一个正则expression式错误,导致它匹配一切。
或者,根目录可能是错误的,nginx可能会返回404,因为它找不到该文件,而不是因为“if”模式匹配。
默认情况下,nginx错误日志将logging实际的文件系统pathnginx尝试访问由于缺less文件而返回404的请求。 如果这些错误没有显示在错误日志中,请参阅log_not_found和error_log的nginx文档。