Правило Nginx для блокировки определенного URL-адреса

Нужна помощь в написании правила для блокировки следующего запроса

Рассматриваемый URL-адрес:

www.somesite.com/catalogsearch/result/?q=downloader

Я пробовал следующее, но это не работает

location ^~ catalogsearch/result/?q=downloader {
    deny all;
}

Я "думаю", потому что ? включен вопросительный знак, обрабатывает ли URL-адрес как строку запроса??

С Уважением


person user1517598    schedule 04.02.2018    source источник


Ответы (1)


Если вы хотите заблокировать доступ через параметр q=downloader только по адресу www.somesite.com/catalogsearch/result/ :

error_page 418 = @blockAccess;

location /catalogsearch/result {
        if ($args ~* "q=downloader") {
                return 418;
        }
}

location @blockAccess {
        deny all;
}

Добавить перед location /

Если вы хотите заблокировать параметр q=downloader всех URL-адресов, просто поместите приведенный ниже код перед location:

error_page 418 = @blockAccess;

if ($args ~* "q=downloader") {
    return 418;
}

location @blockAccess {
    deny all;
}

Если вы хотите заблокировать www.somesite.com/catalogsearch/result/ :

error_page 418 = @blockAccess;

# Add before "location /"
location /catalogsearch/result {
        return 418;
}

location @blockAccess {
        deny all;
}
person Valdeir Psr    schedule 05.02.2018
comment
Привет, Вальдейр, предложенные вами ответы предоставили решение. Спасибо. - person user1517598; 06.02.2018
comment
Спасибо за спасение целого дня - person Bhargav Patel; 18.07.2018