0

I'm trying to block bad bots from clicking certain links to one site running Apache 2.4. Here is what I am trying in htaccess:

RewriteEngine On

# Check for the suspect querystring first
RewriteCond %{QUERY_STRING} gclid=(.*)
RewriteRule .* - [E=IsAdClick:1]

# Filter on those requests with an ad string
<IfDefine IsAdClick>

    # BAN USER BY IP
    Order Deny,Allow
    Deny from 172.64.0.0/13
    Deny from 173.245.48.0/20
    ...

</IfDefine>

The deny rules work if they are by themselves, but for the life of me I cannot get the conditional to work. I've tried other things like

<If "%{QUERY_STRING} =~ /gclid=.*?/">

     # BAN USER BY IP
    Order Deny,Allow
    Deny from 172.64.0.0/13
    Deny from 173.245.48.0/20
    ...

</If>

but there is no effect. Traffic still comes through. What am I missing? I don't want to write a whole bunch of RewriteCond for each IP, nor change the .config files. Thanks.

Update: According to this SO post it seems that IfDefine only responds to command line parameters. Ref:

The IfDefine directive in Apache, Only , ONLY and when I say only i mean ONLY, responds to parameters passed at the command line. Let me emphasize that a little. ONLY COMMAND LINE!

How to achieve the effect I'm looking for though?

Community
  • 1
  • 1
Drakes
  • 23,254
  • 3
  • 51
  • 94

1 Answers1

0

This took a lot of trial and error, but this seems to be working on THE_REQUEST which include any querystring data:

# Filter on those requests with an adwords string
<If "%{THE_REQUEST} =~ /gclid=/i">

    # BAN USER BY IP
    Order Deny,Allow
    Deny from 172.64.0.0/13
    Deny from 173.245.48.0/20
    ...    
</If>

Still, I'd like to know why my second attempt in my question failed.

Drakes
  • 23,254
  • 3
  • 51
  • 94