允许在 Nginx 重写中使用一个参数和值访问特定的 URL

允许在 Nginx 重写中使用一个参数和值访问特定的 URL

我有 Nginx 和下一个 URl,但我无法访问它:

http://www.example.com/file.php?parameter=value

目前我已经设置了 Nginx 规则,阻止对给定示例的访问。

我如何允许这个特定的 URL 并使其正常运行?

location http://www.example.com/file.php?parameter=value {
    try_files $uri $uri/ /file.php?$args;
}

或者:

location ~* http://www.example.com/file.php?parameter=value {
    allow all;
}

也许是这样的?:

~ "^parameter=value"

这个是特定的,我无法访问它。我收到 404/405 错误。这是否意味着它不存在或之前在某处被阻止了?

谢谢。

答案1

如果您只想允许单个 URL 带有特定参数,则需要做一些额外的操作,而不仅仅是简单的代码块。这是因为指令location中只能匹配规范化的 URI 。location

您可以尝试这样的操作:

location /file.php {
    if ($arg_parameter = "value") {
        try_files /file.php$is_args$args =404;
    }
    return 404;
}

location块匹配 URI /file.php(域通过指令匹配server_name)。然后我们测试parameter参数是否为文本value。如果是,则我们将处理传递给 PHP 文件。

否则我们将返回错误代码 404。

在 PHP 脚本中执行此条件检查可能会更容易。

相关内容