2013-04-30 29 views
29

Làm cách nào để đặt điều kiện location trong Nginx phản hồi bất kỳ điều gì không bằng với các vị trí được liệt kê?Vị trí Nginx "không bằng" regex

tôi đã cố gắng:

location !~/(dir1|file2\.php) { 
    rewrite ^/(.*) http://example.com/$1 permanent; 
} 

Nhưng nó không kích hoạt chuyển hướng. Nó chỉ xử lý URI được yêu cầu bằng cách sử dụng các quy tắc trong phần còn lại của cấu hình máy chủ.

+0

Tôi không nhận được nó. Ví dụ, người dùng truy cập vào '/ aabbcc' và bạn định chuyển hướng anh ấy ở đâu? –

+0

Xem http://stackoverflow.com/questions/16159108/nginx-url-rewrite-using-negative-regex – sibidiba

+0

điều này cũng có thể được áp dụng cho chỉ thị vị trí 'location ~ ^/(?! (Dir1 | file2 \ .php)) {} ' – pengemizt

Trả lời

52

Theo nginx documentation

không có cú pháp cho KHÔNG phù hợp với một biểu thức chính quy. Thay vào đó, phù hợp với biểu hiện thường xuyên mục tiêu và phân công một khối trống rỗng, sau đó sử dụng địa điểm/để phù hợp với bất cứ điều gì khác

Vì vậy, bạn có thể định nghĩa một cái gì đó giống như

location ~ (dir1|file2\.php) { 
    # empty 
} 

location/{ 
    rewrite ^/(.*) http://example.com/$1 permanent; 
} 
+0

Lưu ý đáng giá: Tôi cần điều này để chuyển hướng có điều kiện tên máy chủ và có thêm một số' vị trí' bên cạnh chuyển hướng. Chuyển hướng không hoạt động. Hóa ra tôi phải thêm một lệnh 'break;' theo https://stackoverflow.com/a/14049884 –

-1

Giả sử bạn có hai địa điểm nói, location1location2 , bạn có thể thử theo cấu hình khối vị trí để giải quyết vấn đề của mình.

location ~ ^/(location1|location2) { 
     rewrite (.*) http://example.com/$1 permanent; 
} 

Cũng vấn đề bạn đang phải đối mặt có thể là do trình tự của nhiều khối vị trí trong cấu hình của bạn. Vui lòng kiểm tra, Trong trường hợp bất kỳ khối vị trí nào đến trước này, hãy phục vụ yêu cầu.

22

tôi đang tìm kiếm tương tự. và tìm thấy giải pháp này.

Sử dụng tiêu cực regex khẳng định:

location ~ ^/(?!(favicon\.ico|resources|robots\.txt)) { 
.... # your stuff 
} 

Nguồn Negated Regular Expressions in location

+0

Điều này làm việc tốt. Ví dụ: vị trí ~ (/ konference (?!/20)) bắt/konference,/konference/images/ KHÔNG bắt/konference/2015,/konferece/2015/images thử nghiệm trên Nginx 1.10.2 –

Các vấn đề liên quan