Форум программистов, компьютерный форум, киберфорум
Наши страницы
nginx
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Ibif
0 / 0 / 0
Регистрация: 20.04.2019
Сообщений: 3
1

Map с несколькими условиями

20.04.2019, 21:55. Просмотров 1656. Ответов 4
Метки map (Все метки)

Друзья, добрый день.

Здоровье уже не позволяет "без поллитра не разберешь", поэтому прошу помощи.

Пытаюсь скрестить в map несколько условий проверки на паразитарные организмы, но не получается. Критерии следующие: отбрасываем тех кто пришел с браузерными юзерагентами и тех кто пришел не по имени сайта, а по IP. Но в любом случае пропускаем тех, кто пришел по некому адресу somePath.

Сейчас работает конструкция из 4-х map.

map $http_user_agent $sign_ua
{
"" 1;
"~curl/.+" 1;
"~*WordPress.+" 1;
default 0;
}

map "$host" $signhost
{
"mydomain.name" 1;
default:default 0;
}

map "$uri" $signuri {
"~*somePath*" 1;
default 0; }

# если есть суперадрес или не бот = проходи
map "$signuri:$sign_ua" $signres
{
"1:0" 1;
"1:1" 1;
"0:0" 1;
"0:1" 0;
default 0; }

server {
listen 80;
listen [::]:80;

#if ($signres = 0 ) {return XXX;}
#if ($signhost = 0) {return YYY;}

Читал, что в map можно использовать несколько условий, пытался сделать что-то типа с точками, звёздочками, крышечками, палочками и т.п. = не получается. Заработало только для условия "mydomain.name:/" и только для главной страницы
map "$host:$uri" $signres

{
"mydomain.name:~*(.)" 1; # здесь должно быть условие выдать 1 если пришли по имени сайта и запрошен любой адрес
# здесь надо выдать 1 если пришли как угодно, но запрошен определенный путь somePath

default 0; }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2019, 21:55
Ответы с готовыми решениями:

While c несколькими условиями
Добрый день! Подскажите, пожалуйста, мне нужно найти строку в которой ячейки в 2 определенных...

do While с несколькими условиями
В пособии дан пример использования цикла: int a = 4; do { System.Console.WriteLine(a);...

Работа while с несколькими условиями
Доброго времени суток, У меня проблема, надо написать программу где в массив вписывается строка...

СЧЕТЕСЛИ с несколькими условиями
В прилагаемом примере табеля у слесаря и мастера учет рабочих дней ведется по-разному: у слесаря...

Запрос с несколькими условиями
Здравствуйте Уважаемые! Необходимо опять Ваша помощь и вот в чем: Уважаемые знатоки: однажды...

4
Emilien
703 / 507 / 288
Регистрация: 07.11.2015
Сообщений: 813
21.04.2019, 02:21 2
Лучший ответ Сообщение было отмечено Ibif как решение

Решение

Код
map "$host:$uri" $signres
{
"~^mydomain\.name:"  1; # здесь должно быть условие выдать 1 если пришли по имени сайта и запрошен любой адрес
"~^[^:]*:.*somePath" 1; # здесь надо выдать 1 если пришли как угодно, но запрошен определенный путь somePath

default 0; }
1
Ibif
0 / 0 / 0
Регистрация: 20.04.2019
Сообщений: 3
21.04.2019, 10:56  [ТС] 3
Спасибо, огромное. Заработало: чуток подправил конструкцию: добавил .*, $uri сменил на $request_uri и добавил условие проверки на ботов (1=бот)

map "$host:$request_uri:$bad_useragent" $signres
{
"~mydomain\.name:.*:0" 1; # любой адрес и не бот
"~[^:]*:.*somePath.*: (0|1)" 1; # 1 пропускам по определенному пути любого. Пробел перед открывающейся круглой скобкой лишний, иначе смайлик рисует

default 0; }
0
Emilien
703 / 507 / 288
Регистрация: 07.11.2015
Сообщений: 813
21.04.2019, 12:55 4
Лучший ответ Сообщение было отмечено Ibif как решение

Решение

Цитата Сообщение от Ibif Посмотреть сообщение
"~mydomain\.name:.*:0" 1; # любой адрес и не бот
В таком виде шаблон найдёт совпадение в любой части строки. Например, если $host=site.ru, $bad_useragent=1, а в $request_uri будет /mydomain.name::0/.
site.ru:/mydomain.name::0/:1 https://regex101.com/r/Fwl6Sn/1

Если добавить ^ в начало шаблона и $ в конец, то mydomain.name может совпасть только в начале строки, а :0 только в конце строки.
"~^mydomain\.name:.*:0$" 1; # любой адрес и не бот
1
Ibif
0 / 0 / 0
Регистрация: 20.04.2019
Сообщений: 3
21.04.2019, 17:56  [ТС] 5
Спасибо, супер
0
21.04.2019, 17:56
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2019, 17:56

Select с несколькими условиями
Добрый день, форумчане. Прошу помочь с формулой. Нужно получить значение в таблицу tblOrders из...

Запрос с несколькими условиями
Здравствуйте, специалисты! Помогите, пожалуйста, составить sql-запрос. Дано: две таблицы 1)...

Формула с несколькими условиями
Уважаемые форумчане,подскажите с формулой,нужно в ячейке D1 функцию =ЕСЛИ(И( которая может...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru