我在网站的 .htaccess 中创建了一条重写规则,以阻止具有空白用户代理和仅包含“-”的用户代理的流量,除非请求来自网络服务器本身。该规则仅适用于向网站根目录 (example.com) 发出的请求,但不适用于网站内现有或其他页面 (example.com/someradompage)。网络服务器是apache2。
.htaccess 配置
RewriteCond %{HTTP_USER_AGENT} "^$|^-$" [NC]
RewriteCond %{REMOTE_ADDR} "!^x\.x\.x\.x$" <- Public IP address of the webserver.
RewriteRule ^.* - [F,L]
我使用以下curl命令对此进行了测试:
curl -k -A "" https://example.com -> Returns status code 403 forbidden.
curl -k -A "" https://example.com/someradompage -> Serves the page or returns status code 404 not found if the page doesn't exist.
我怎样才能阻止来自这些空白和“-”用户代理对网站内页面的请求?
显然,该规则与应用程序自动生成的另一个规则相冲突。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
通过将上面的规则放在该规则之前,它可以按预期工作。但不确定为什么会发生这种冲突。