首页 > 解决方案 > 没有用户代理的 Apache 2.4 阻止请求

问题描述

我的目标是简单地阻止没有设置 User-Agent 标头的请求。从Apache 的文档来看,这应该很简单。我一直在尝试使用(在 VirtualHost 部分)如下:

RewriteEngine on
RewriteCond ${HTTP_USER_AGENT} ^$    
RewriteRule .* - [F]

我正在curl使用以下内容进行测试(更改了域名):

curl -v --http1.1 https://example.com/ > /dev/null

为此发送的标头是:

> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.68.0
> Accept: */*

curl -v --http1.1 --user-agent "" https://example.com/ > /dev/null

而为此发送的标头是:

> GET / HTTP/1.1
> Host: example.com
> Accept: */*

在这两种情况下,我都看到了我希望看到的发送内容。

无论我做什么,Apache 都会很高兴地为两者返回 200。我在这里想念什么?

标签: apachemod-rewriteuser-agent

解决方案


您快到了,Apache 服务器变量以 a 为前缀%,而不是$

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^$    
RewriteRule .* - [F]

推荐阅读