gpt4 book ai didi

php - 处理40 4's with Named Location in Nginx and returning custom 404'

转载 作者:行者123 更新时间:2023-12-03 07:57:23 25 4
gpt4 key购买 nike

我有一个Web服务,可通过Nginx Web服务器提供动态图像。

通过解释URL结构并将初始404响应传递到命名位置来处理请求,然后该命名位置将URL与各种条件进行匹配以返回适当的图像。

这是基本配置:

error_page 404 = @imageHandlers;

location @imageHandlers {
#= Match pattern 1 =========
if ($uri ~* "^/(some_pattern1)$") {
set $x = $1;
rewrite .* "image_handler_type1.php?q=$x" last;
}

#= Match pattern 2 =========
if ($uri ~* "^/(some_pattern2)$") {
set $x = $1;
rewrite .* "image_handler_type2.php?q=$x" last;
}

etc....
}

这可以正常工作,但是当不匹配任何模式时,我也想显示自定义404错误页面。

我以为可以在“custom_error.php”文件中处理此问题:
<?php
$status = $_GET["status"];
if ($status == 404) {
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
}
?>
<html>
<head><title><?php echo $status;?></title></head>
<body bgcolor="white">
<center><h1>Error <?php echo $status;?></h1></center>
</body>
</html>

这样Nginx配置现在看起来像这样:
fastcgi_intercept_errors on;

error_page 404 = @imageHandlers;

location @imageHandlers {
#= Match pattern 1 =========
if ($uri ~* "^/(some_pattern1)$") {
set $x = $1;
rewrite .* "image_handler_type1.php?q=$x" last;
}

#= Match pattern 2 =========
if ($uri ~* "^/(some_pattern2)$") {
set $x = $1;
rewrite .* "image_handler_type2.php?q=$x" last;
}

etc....

#= Otherwise display custom 404 =========
rewrite .* "/custom_error.php?status=404" last;
}

我添加了“fastcgi_intercept_errors on”,以便Nginx不会拦截大于300的响应代码。

不幸的是,“custom_error.php”返回的404响应仍被Nginx拦截,并返回其自己的标准404响应,因为,我猜想,“@ imageHandlers”命名位置传递将初始404重置为块内的状态200。

如果我从“custom_error.php”中注释掉“if($ status == 404)”块,则自定义错误显示会很好,但是我得到的状态200状态响应代码不正确。

如何使用已经设置的配置实现自定义404?

最佳答案

最近遇到了来自指定位置的自定义错误的问题,偶然发现了这个问题。

我认为这里发生的是,当您回复404时,fastcgi_intercept_errors on截获了它,并且您定义了error_page 404,可能导致潜在的递归。在这种情况下,nginx将返回其内部错误。

我认为您不应该使用fastcgi_intercept_errors,或者您可以在@imageHandlers位置定义另一个自定义错误,例如一个未使用的代码(error_page 417 /some_file.html),因此您停止从该位置外部继承定义的error_page。

在我的情况下,我也必须添加一个recursive_error_pages on;,并且不确定,您可能也需要它。

关于php - 处理40 4's with Named Location in Nginx and returning custom 404',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55825678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com