使用 NGINX 进行通配符拒绝

使用 NGINX 进行通配符拒绝

我有一个网址...

/index.php?option=com_docman&task=doc_download&gid= // many gid's

我想使用带通配符的 NGINX 位置块来**“全部拒绝”**任何包含“option=com_docman”的 URL

在各种正则表达式测试器中...

^(.*)(option)(.*)(com_docman)$ // Works fine for normal regex

但是,在我的 nginx.conf 文件中测试时...以下操作不起作用。

location ~ ^(.*)(option)(.*)(com_docman)(.*)$ {
    Deny All;
}

奖金有没有办法让 robots.txt 以相同的方式处理通配符 URL?

编辑不确定为什么被否决...有人想告诉我我在这里做错了什么明显的事情吗?

答案1

您的基本问题似乎是语法 -Deny不是一个有效的关键字。

nginx 访问模块的文档(https://nginx.org/en/docs/http/ngx_http_access_module.html) 提供了正确的语法,即deny all;

您可能已经通过运行配置检查来识别问题:

$ nginx -t
nginx: [emerg] unknown directive "Deny" in /etc/nginx/nginx.conf:48

我无法解释为什么你的问题被否决,但它的标题和实际内容不一定匹配——你实际上是想根据某些参数拒绝访问 URL 端点,而不是进行通配符拒绝。

您的问题还包含 apache 和 nginx 标签(请参阅https://serverfault.com/help/tagging),而实际上它只与 nginx 有关。

我想你可能还想检查一下https://serverfault.com/help/how-to-ask- 不清楚您在提出这个问题之前做了多少研究。

答案2

location指令仅匹配规范化的 URI,并且不包含查询参数。

您可以使用以下命令阻止option带有值参数的请求com_docman

if ($arg_option = "com_docman") {
    deny all;
}

相关内容