trường hợp nginx không nhạy cảm viết lại


15

Tôi đang cố gắng làm cho chuyển hướng nginx của mình sạch nhất có thể. Tôi hiểu ~ * dành cho trường hợp không nhạy cảm nhưng tôi chỉ có thể làm cho nó hoạt động trong ví dụ 2.

ví dụ 1

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

Ví dụ 2 -Điều này hoạt động, nhưng nó không hiệu quả như dòng trên.

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

Có cách nào để chuyển hướng trường hợp không nhạy cảm với ví dụ 1 mà không bị quá lầy không?

Cảm ơn.

Câu trả lời:


10

Tôi chỉ có (và sửa) vấn đề tương tự và kết thúc ở đây cố gắng tìm câu trả lời. Tài liệu nginx ( http://nginx.org/en/docs/http/ngx_http_rewrite_module.html ), không nói rõ rằng ~ * chỉ hoạt động bên trong một câu lệnh if, nhưng rõ ràng, đó là trường hợp.

Để có được kết hợp biểu thức chính quy không phân biệt chữ hoa chữ thường cho URL ngnix viết lại bên ngoài câu lệnh if, tôi đã phải sử dụng kiểu Apache / Perl:

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

Xem http://perldoc.perl.org/perlretut.html (tìm kiếm không nhạy cảm). Dường như tiền tố (? I) bên ngoài một nhóm chụp cụ thể làm cho nó áp dụng cho toàn bộ chuỗi tìm kiếm. Lưu ý: Điều này dường như KHÔNG hoạt động với "^ (? I) foobar" vì dường như "^" được ngụ ý.

Mặc dù vậy, chỉ để chắc chắn, và để làm cho bất kỳ việc viết lại nào trong tương lai dễ dàng hơn để duy trì và ít mơ hồ hơn nếu bạn kết thúc việc thực hiện chúng, bạn có thể muốn làm một cái gì đó như thế này:

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

Hi vọng điêu nay co ich...


30

Những gì tôi đã tìm thấy để làm cho công việc này:

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

Bạn chỉ cần làm điều này:

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

Điều này chỉ có nghĩa là trả trước (? I) và nếu không thì mọi thứ đều giống nhau để khớp.


4
Đây phải là câu trả lời được chấp nhận.
thekingoftruth

2
Cảm ơn bạn. Rất đơn giản và khó tìm trong tài liệu Nginx. Nhiều đánh giá cao con trỏ súc tích!
PKHunter

0

Làm việc trên một trang web ngay bây giờ tôi thấy điều này dường như cũng hoạt động. Đối với bất kỳ người nào trong tình huống tương tự tôi đã ở trong vài giờ qua.

location ~* ^/foobar {
  rewrite ^(.*)$ $scheme://$http_host/whatever/foobar redirect;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.