Форум программистов, компьютерный форум, киберфорум
Nginx
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 20.04.2019
Сообщений: 3

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

20.04.2019, 21:55. Показов 3580. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.04.2019, 21:55
Ответы с готовыми решениями:

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

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

Поиск в БД по LIKE с несколькими условиями
Привет всем. Вопрос простой. Есть талица Email Istochnik test@mail.ru Источник1 test@yandex.ru Источник1 ...

4
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
21.04.2019, 02:21
Лучший ответ Сообщение было отмечено Ibif как решение

Решение

Code
1
2
3
4
5
6
map "$host:$uri" $signres
{
"~^mydomain\.name:"  1; # здесь должно быть условие выдать 1 если пришли по имени сайта и запрошен любой адрес
"~^[^:]*:.*somePath" 1; # здесь надо выдать 1 если пришли как угодно, но запрошен определенный путь somePath
 
default 0; }
1
0 / 0 / 0
Регистрация: 20.04.2019
Сообщений: 3
21.04.2019, 10:56  [ТС]
Спасибо, огромное. Заработало: чуток подправил конструкцию: добавил .*, $uri сменил на $request_uri и добавил условие проверки на ботов (1=бот)

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

default 0; }
0
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
21.04.2019, 12:55
Лучший ответ Сообщение было отмечено 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
0 / 0 / 0
Регистрация: 20.04.2019
Сообщений: 3
21.04.2019, 17:56  [ТС]
Спасибо, супер
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2019, 17:56
Помогаю со студенческими работами здесь

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

Дженерики с несколькими условиями
Добрый вечер! Если я использую дженерик класс я могу сделать некоторые уточнения для компилятора Например ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru