nginx büyük / küçük harfe duyarlı olmayan yeniden yazma


15

Nginx yönlendirmelerimi olabildiğince temiz yapmaya çalışıyorum. Anladım ~ * büyük / küçük harfe duyarlı değil ancak yalnızca örnek 2'de çalışmasını sağlayabiliyorum.

örnek 1

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

Örnek 2 -Bu işe yarar, ancak yukarıdaki satır kadar verimli değildir.

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

Çok çamurlu olmadan örnek 1 ile büyük / küçük harfe duyarlı olmayan yönlendirmeler yapmanın bir yolu var mı?

Teşekkürler.

Yanıtlar:


10

Ben sadece aynı sorunu vardı (ve sabit) ve burada cevap bulmaya çalışırken sona erdi. Nginx belgeleri ( http://nginx.org/en/docs/http/ngx_http_rewrite_module.html ), ~ * öğesinin yalnızca bir if ifadesinde çalıştığını açıkça belirtmez, ancak görünüşe göre durum budur.

Bir if ifadesi dışında bir ngnix URL yeniden yazma için büyük / küçük harfe duyarlı olmayan normal ifade eşleşmesi almak için Apache / Perl stilini kullanmak zorunda kaldım:

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

Bkz. Http://perldoc.perl.org/perlretut.html (duyarsız arama). Ayrıca, belirli bir yakalama grubunun dışındaki (? İ) önekinin, tüm arama dizesi için geçerli olduğu görülüyor. Not: Bu, "^ (? İ) foobar" ile çalışmıyor gibi görünüyor çünkü "^" ima ediliyor gibi görünüyor.

Yine de, emin olmak ve gelecekteki yeniden yazma işlemlerinin daha kolay ve daha az belirsiz olmasını sağlamak için, bir demet yapıyorsanız, böyle bir şey yapmak isteyebilirsiniz:

location /foobar {
     rewrite "(?i)" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
}

Bu yardımcı olur umarım...


30

Bu işi yapmak için ne buldum:

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

Bunu yapmanız yeterlidir:

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

Bu sadece başaşağı (? İ) anlamına gelir, aksi takdirde eşleştirme için her şey aynıdır.


4
Bu kabul edilen cevap olmalı.
thekingoftruth

2
Teşekkür ederim. Çok basit ve yine de Nginx belgelerinde bulmak çok zor. Özlü işaretçi çok takdir!
PKHunter

1

Şu anda bir web sitesinde çalışarak bunun da işe yaradığını gördüm. Aynı durumda olan herkes için bu son birkaç saat içinde bulundum.

location ~* ^/foobar {
  rewrite ^(.*)$ $scheme://$http_host/whatever/foobar redirect;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.