我data=/path/to/filename.htm
在uri中有特殊参数。
它建立在 SSI 上的陈旧生锈的网站,我无法修改它。
问题是当作为 arg_data 传递的文件名不存在时,页面已损坏。
在这种情况下,我想重定向到 404.htm。
像这样的东西:
if (!-f $arg_data){
rewrite ^.*$ /404.htm last;
}
但我得到:
处理“/404.htm”时重写或内部重定向循环
我认为是因为我没有检查if arg_data
存在。
但是nginx没有嵌套if-s。
我试过了:
set $data index.htm;
if ($args ~ "data=(.+)") {
set $data $1;
}
if (!-f $data) {
rewrite ^.*$ /404.htm last;
}
想法被设置$data
为某个 100% 存在的文件,然后如果数据参数被传递,则重写。
由于某种原因,它给出了相同的错误,内部重定向循环
看起来我做错了。
好的,这是一个非常奇怪的场景,您似乎走在了正确的轨道上。
rewrite
不过,我会return 404;
使用error_page
来定义 404 错误页面,而不是。例如:
好的,所以关于我们最后的评论,您需要
AND
两个if
语句的条件。NGinx
无法做到这一点。为了实现这一点,我们将使用一个处理
$test
var 的小技巧: