location ~* ajax.php {
if ($args ~ "action=query_new") {
return 404;
}
}
我有一个存放在网站example.com的测试目录中的ajax.php文件我想为包含args / query字符串action = query_new的ajax.php的所有请求返回404错误。我写了上面的代码。代码有效但它使ajax.php文件不可用,即当上面的代码在运行时ajax.php没有执行。我的网站使用此文件来处理其他一些查询字符串。我该如何解决这个问题?
答案 0 :(得分:0)
在nginx
配置中的某个位置,您会看到类似location ~ [^/]\.php(/|$) { ... }
或location ~ \.php$ { ... }
的位置区块。这包含将php文件发送到上游解释器所需的代码。
您的新位置块优先,并阻止任何匹配ajax.php
的文件作为php执行。
一种解决方案是复制将php文件发送到上游解释器所需的代码到两个位置块。这可以通过将这些指令移动到单独的文件并使用include
指令将它们加载到每个块中来实现。类似的东西:
location ~* ajax.php$ {
if ($arg_action = "query_new") { return 404; }
include path/to/my_php_config;
}
location ~* \.php$ {
include path/to/my_php_config;
}
include
指令为documented here。