2012-05-22 18 views
11

tôi có cấu hình này mà làm việc như mong đợi trong một sản phẩm nào server { } nétLàm cách nào để nginx ngừng xử lý các quy tắc khác và phục vụ một địa điểm cụ thể?

location ^~ /foo/ { 
    alias /var/www/foo/; 
    } 

Nhưng khi tôi di chuyển này trong một định nghĩa máy chủ lớn hơn đáng kể (một sử dụng cho một wordpress cấu hình multi-site), nó sẽ ngừng làm việc và wordpress sẽ trả lời nó (mà rõ ràng không phải là ý định của tôi).

Tôi đã cố gắng đặt ở đầu hoặc cuối khối máy chủ, nhưng điều này không thay đổi.

Tôi có thể buộc nginx sử dụng vị trí này như thế nào?

Trả lời

14

Có thể bạn đang tìm kiếm break.

location ^~ /foo/ { 
    alias /var/www/foo/; 
    break; 
} 

Từ HttpRewriteModule documentation:

last - hoàn thành xử lý các chỉ thị viết lại hiện tại và khởi động lại quá trình (bao gồm cả viết lại) với một tìm kiếm cho một trận đấu trên URI từ tất cả các địa điểm có sẵn.

break - hoàn tất việc xử lý các chỉ thị viết lại hiện tại và xử lý không ghi đè tiếp tục trong khối vị trí hiện tại .

Lưu ý rằng các khối vị trí bên ngoài, cuối cùng và ngắt có hiệu quả là giống nhau.

+1

Nó dành cho các quy tắc viết lại chứ không phải cho chỉ thị vị trí. – peterh

1

Các khối vị trí trong Nginx là độc quyền. Nếu bạn sử dụng location ^~ thì các quy tắc khác có thể là các tiêu đề hết hạn cho các đối tượng tĩnh sẽ không áp dụng trừ khi bạn sao chép các quy tắc đó dưới dạng lồng nhau trong cùng một khối vị trí.

Nếu bạn có thể chia sẻ toàn bộ cấu hình của mình thì tôi có thể làm cho nó hoạt động cho bạn. Nhiều khả năng bạn cần sử dụng các khối vị trí lồng nhau.

+0

Câu thứ hai của bạn không thể giải mã được. – peterh

+0

Ý tôi là nếu các tiêu đề hết hạn được liệt kê dưới một khối chung riêng biệt, thì chúng sẽ không áp dụng cho khối này đang sử dụng 'vị trí^~' –

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