Làm cách nào để xóa khối vị trí khỏi $ uri trong cấu hình nginx?


15

Tôi có một ghi lại trong tập tin ngix conf của tôi hoạt động đúng, ngoại trừ nó dường như bao gồm khối vị trí như là một phần của biến $ uri. Tôi chỉ muốn đường dẫn sau khối vị trí. Mã cấu hình hiện tại của tôi là:

location /cargo {
    try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args;
}

Sử dụng một url ví dụ của http://localhost/cargo/testpagechuyển hướng hoạt động, tuy nhiên giá trị của tham số "_REWRITE_COMMAND" mà tệp php của tôi nhận được là "/ Freight / testpage". Tôi cần phải loại bỏ khối vị trí và chỉ cần có "trang thử nghiệm" là $ uri

Tôi khá chắc chắn rằng có một cú pháp regex để phân chia $ uri và gán nó cho một biến mới bằng cách sử dụng $ 1 $ 2, v.v., nhưng tôi không thể tìm thấy bất kỳ ví dụ nào để thực hiện một phép gán biến bằng cách sử dụng regex không phải là một phần của việc viết lại tuyên bố. Tôi đã tìm kiếm và cố gắng trong nhiều giờ và dường như tôi không thể vượt qua bước cuối cùng này.

Tôi cũng biết rằng tôi chỉ có thể loại bỏ mã này trên mã ứng dụng, nhưng lý do tôi muốn thử sửa nó trong nginx conf là vì lý do tương thích vì nó cũng chạy trên Apache. Tôi cũng nên nói rằng tôi đã tìm ra một cách thực sự khó khăn để làm điều đó, nhưng nó liên quan đến một câu lệnh "nếu" để kiểm tra sự tồn tại của tệp và tài liệu nói cụ thể là không làm theo cách đó.

Câu trả lời:


17

Nhìn xung quanh tôi sẽ đoán rằng sử dụng một vị trí regrec với các ảnh chụp là dễ nhất. Điều chỉnh ví dụ của bạn Tôi kết thúc với:

location ~ ^/cargo(.*) {
    try_files $1 $1/ /cargo/index.php?_REWRITE_COMMAND=$1&args;
}

aha, thật đơn giản một khi ai đó chỉ ra cho bạn! Tôi đã phải thực hiện một số sửa đổi nhỏ để xử lý việc viết lại url gốc đến đúng vị trí. Tôi đặt câu trả lời lên trong câu hỏi vì tôi không thể thực hiện bất kỳ định dạng nào trong nhận xét này. Nhắc nhở duy nhất còn lại là khối php bây giờ phải ở trên khối vị trí này hoặc nếu không thì một vòng chuyển hướng vô hạn được tạo ra (do / hàng hóa là một biểu thức chính và url chuyển hướng cũng chứa / hàng hóa). không chắc chắn nếu có một cách khác để ngăn chặn điều đó xảy ra?
Jason

Tôi khuyên bạn nên đọc về thứ tự của các vị trí regrec và không regrec. Tôi thường chuyển sang thực hiện tất cả các vị trí regrec tại một số điểm vì sau đó thứ tự được xác định theo thứ tự trong tệp cấu hình thay vì tính cụ thể của kết quả khớp.
Theuni

tuyệt vời cảm ơn, tôi đã tưởng tượng những gì sẽ làm cho regex ở trên tốt hơn nếu nó khớp / hàng hóa / (bất cứ thứ gì ngoại trừ index.php) thì điều đó sẽ ngăn lỗi máy chủ do vòng lặp viết lại vô hạn.
Jason

3

Tôi đã tìm thấy một thứ khác hiệu quả với tôi (vì tôi đang sử dụng gunicorn, tôi không thể chọn những gì để vượt qua)

Bạn sẽ có thể thoát khỏi với

location /cargo {
    rewrite ^/cargo(.*)$ $1 break;
    try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args;
}

1

Đối với những người có thể đang vật lộn để thêm nó cho dịch vụ vi mô hoặc API bằng Node JS, tôi đã sử dụng cách sau để xóa apikhỏi url trên máy chủ của mình:

location ^~ /api {
        rewrite ^/api(/.*)$ $1 break;
        proxy_pass    http://127.0.0.1:3001/;
    }
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.