Назад | Перейти на главную страницу

перезапись nginx без учета регистра

Я пытаюсь сделать мои перенаправления nginx как можно более чистыми. Я понимаю, что ~ * нечувствителен к регистру, но я могу заставить его работать только в примере 2.

Пример 1

rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

Пример 2 - Это работает, но не так эффективно, как строка выше.

if ( $request_filename ~* foobar ) {
         rewrite ^ http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
   }

Есть ли способ сделать перенаправления без учета регистра в примере 1, не делая его слишком грязным?

Спасибо.

Что я нашел, чтобы заставить эту работу работать:

rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

Вам нужно только это сделать:

rewrite (?i)^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

Это просто означает добавление (? I), в остальном все то же самое для сопоставления.

У меня была (и исправлена) та же проблема, и я оказался здесь, пытаясь найти ответ. Документация 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;
}

Надеюсь это поможет...

Работая сейчас над веб-сайтом, я обнаружил, что это работает очень просто. В блоке сервера вам просто нужно добавить записи местоположения в следующем порядке:

#This rule processes the lowercase page request.
#The (~) after the location tag specifies it is case sensitive
# so it overrides the next rule, which would continuously redirect
location ~ /index[.]html {
#process the index.html page       
}

#This rules rewrites the index request which may be non-case-sensitive
# to all lowercase so the previous rule can process it.
location ~* /index[.]html {
   rewrite ^(.*)$ $scheme://$http_host/index.html redirect;
}