Điểm:1

Thay thế cùng một giá trị nhiều lần bằng nginx sub_filter

lá cờ in

Chỉnh sửa: Ví dụ tái sản xuất: https://github.com/searchingforlife/nginx-substlation

Tôi đang cố gắng thêm/chèn số lượng tập lệnh tùy ý vào tệp/đầu ra HTML. Tất cả đều lọc trên cùng một giá trị </body> để tiêm cho mình.

phiên bản nginx: nginx/1.16.1

Hãy tưởng tượng chúng ta có hai tệp conf như vậy (đơn giản hóa):

# script_one.conf

sub_filter "</body>" "<script src='/one.js'></script></body>";
# kịch_bản_hai.conf

sub_filter "</body>" "<script src='/two.js'></script></body>";

Và tệp conf nginx chính của chúng tôi:

vị trí / một {
  sub_filter_once tắt;
  bao gồm /script_one.conf;
  bao gồm /script_two.conf;
}

Tuy nhiên, điều này dường như không hoạt động và nginx chỉ thêm tập lệnh đầu tiên. Nếu giá trị bộ lọc khác (giả sử một bộ lọc trên </head> và cái khác trên </body>), thì nginx sẽ chèn cả hai tập lệnh.

Có cách nào để khắc phục giới hạn này và yêu cầu nginx tiêm cả hai tập lệnh không? Tôi biết tôi có thể tạo một tệp conf mới kết hợp cả hai tập lệnh thành một và bao gồm tập lệnh đó nhưng điều đó không mở rộng quy mô khi bạn có hơn 10 tập lệnh để đưa vào. Tập lệnh này có thể được kết hợp theo nhiều cách khác nhau tùy thuộc vào vị trí.

Michael Hampton avatar
lá cờ cz
Như được hiển thị, nó sẽ hoạt động. Một cái gì đó khác có lẽ đang xảy ra. Vui lòng đăng đầu ra của `nginx -T`.
searchingforlife avatar
lá cờ in
@MichaelHampton Đã thêm repo để tái tạo hành vi này: https://github.com/searchingforlife/nginx-substlation
mforsetti avatar
lá cờ tz
thử sử dụng `">
Điểm:0
lá cờ us

Đây là suy đoán, tôi chưa xác minh nó từ mã nguồn nginx. Tôi giả sử nginx lưu trữ các khóa để thay thế trong cấu trúc băm, nghĩa là thay thế x với y.

Bây giờ, khi nginx đọc tệp cấu hình theo thứ tự, trước tiên, nó sẽ thêm khóa </body> vào bản đồ thay thế, rồi thay thế bằng bản đồ thứ hai.

searchingforlife avatar
lá cờ in
Bạn có thể đúng.Thay vào đó, tôi nghĩ về một cách tiếp cận khác dường như giải quyết được vấn đề này khi chúng tôi chỉ viết lại một lần. Nếu có ai quan tâm, hãy xem nhánh giải pháp: https://github.com/searchingforlife/nginx-substlation/tree/solution
Điểm:0
lá cờ in

Cuối cùng tôi đã nghĩ ra một cách tiếp cận khác mà chỉ viết lại một lần. Nếu có ai quan tâm, hãy xem chi nhánh giải pháp: https://github.com/searchingforlife/nginx-substlation/tree/solution

Về cơ bản, chúng tôi tạo một biến chứa tên của các tập lệnh để đưa vào, sau đó đưa tất cả chúng vào cùng một lúc. Bằng cách này, cuối cùng chúng tôi chỉ viết lại một lần.

vị trí ~ ^/ {
  đặt $js_args "một, hai";
  bao gồm scripts.conf;
}
# tập lệnh.conf

nếu ($js_args ~ "^$") {
  đặt $js_args '';
}

đặt $scripts "";

if ($js_args ~* "(,|^)one([,]|$)") {
  đặt $scripts "${scripts}<script src='/one.js'></script>";
}

if ($js_args ~* "(,|^)two([,]|$)") {
  đặt $scripts "${scripts}<script src='/two.js'></script>";
}

sub_filter "</body>" "${scripts}</body>";

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.