在nginx

时间:2015-12-04 08:58:45

标签: php ajax nginx

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没有执行。我的网站使用此文件来处理其他一些查询字符串。我该如何解决这个问题?

1 个答案:

答案 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