Criei uma regra Rewrite no .htaccess de um site para bloquear o tráfego com user-agents em branco e user-agents com apenas "-", exceto quando a solicitação vem do próprio servidor web. A regra funciona apenas para solicitações feitas à raiz do site (example.com), mas não para páginas do site, existentes ou não (example.com/someradompage). O servidor web é o apache2.
Configuração .htaccess
RewriteCond %{HTTP_USER_AGENT} "^$|^-$" [NC]
RewriteCond %{REMOTE_ADDR} "!^x\.x\.x\.x$" <- Public IP address of the webserver.
RewriteRule ^.* - [F,L]
Eu testei isso com os seguintes comandos 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.
Como posso também bloquear solicitações desses agentes de usuários em branco e "-" para páginas dentro do site?
Aparentemente, esta regra está em conflito com outra regra que foi gerada automaticamente pela aplicação.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Funciona como pretendido, colocando a regra acima antes desta regra. Não sei por que esse conflito acontece em primeiro lugar.