А вот более правильный код, который будет работать даже если есть и другие параметры помимо ID:
set $id 123;
if ($request_uri ~* '/products/detail.php\?ID=.+')
{
set $id $arg_id;
}
if ($id !~* '^\d+$')
{
access_log /var/log/nginx.error_log;
return 403;
}
Вышел казус: года 3 на сайте этом не было в данном скрипте никаких параметров GET кроме ID, а стоило мне написать такую регулярку для nginx, как на следующий день в обновлении программисты добавили еще один параметр. :)
Спасибо, не знал про Source. У меня не получилось заставить работать ваш код: я переделал его под бэкенд Apache, прописав все proxy_pass и т.п., но почему-то получалось так, что скрипт редиректился на индексную страницу сайта.
Помучавшись минут 10, я понял, что ваш вариант выглядит более громоздким, и в итоге отказался от него.
Смею предположить что .{7} это 7 любых символов, не только цифр. может пойти в сторону \d{7} или не очень помню как это в nginx. Плюс может у Вас там есть другие параметры дальше?