Block bot on uri with query_string

Hi All,

Been trying to block bots from accessing a URI that has a query_string
“action=get_it”, i tried below

    location ~* \?(action=get_it)$ {

            if ( $http_user_agent ~

(crawl|Googlebot|Slurp|spider|bingbot|tracker|click|parser|spider)) {

                    return 404;

                    break;

            }

     }

i just learned that location does not match query string, if i do the
is_arg i cant do nested if, anyone able to do this before?

TIA.

Regards,

Ron

On Sun, Jul 28, 2013 at 11:55 AM, ron ramos [email protected] wrote:

TIA.

I don’t remember the exact syntax but something like this should work:

if ($arg_action = get_it) { set $no_bot 1; }
if ($http_user_agent ~ ) { set $is_bot 1; }
if ($no_bot$is_bot = 11) { return 404; }


O< ascii ribbon campaign - stop html mail - www.asciiribbon.org

oh cool thanks i get what you mean. thanks for the help!

Regards,
Ron

On 28 Jul 2013 10:08, “edogawaconan” [email protected] wrote:

            if ( $http_user_agent ~

i just learned that location does not match query string, if i do the
is_arg
i cant do nested if, anyone able to do this before?

TIA.

I don’t remember the exact syntax but something like this should work:

if ($arg_action = get_it) { set $no_bot 1; }
if ($http_user_agent ~ ) { set $is_bot 1; }
if ($no_bot$is_bot = 11) { return 404; }

I would personally use a map{} which examined both variables and then a
single if() to take action based on the map’s result.

I’d be interested in any official comment from nginx staff about the
relative merits of these approaches …

J