Я просто (і виправив) цю саму проблему і опинився тут, намагаючись знайти відповідь. Документація nginx ( http://nginx.org/en/docs/http/ngx_http_rewrite_module.html ) не чітко визначає, що ~ * працює лише всередині оператора if, але, мабуть, так і є.
Щоб отримати невідчутне до регістру регулярне вираження відповідності для переписування URL-адреси ngnix за межами оператора if, мені довелося використовувати стиль Apache / Perl:
rewrite "(?i)foobar" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
Дивіться http://perldoc.perl.org/perlretut.html (пошук нечутливих). Також здається, що префіксація (? I) поза певною групою захоплення змушує застосовувати її до всього рядка пошуку. Примітка. Це, здається, не працює з "^ (? I) foobar", оскільки здається, що "^" мається на увазі.
Однак, щоб бути впевненим, і щоб зробити будь-які майбутні переписування простішими в обслуговуванні та менш неоднозначними, якщо ви, нарешті, зробите купу з них, ви можете зробити щось подібне:
location /foobar {
rewrite "(?i)" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
}
Сподіваюся, це допомагає ...