Tôi đang cố chuyển hướng khách truy cập trên thiết bị di động đến các trang AMP bằng nginx.
Về cơ bản tôi đã sử dụng tập lệnh @ https://gist.github.com/dangayle/2919206 với các sửa đổi được đề xuất, cộng với các yếu tố từ câu trả lời @ thêm đường dẫn hậu tố URL (cho AMP trên thiết bị di động) mà không gây ra vòng lặp chuyển hướng trong nginx_
Sự khác biệt chính ở đây là tôi không cố gắng chuyển hướng người dùng di động đến tên miền phụ dành cho thiết bị di động và thay vào đó chỉ cần thêm một chuỗi truy vấn (?amp=1"):
Đó là mã trong khối HTTP cho nginx.conf:
mặc định 0;
"~* (android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo |midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6) 0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino" 1;
"~* ^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)| al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s ) |avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi |ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do( c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa |ze)|fec|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit |hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p |s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno |ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi )|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo) |mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5 )|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti| wv)|oran|owg1|p800|p an(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt| se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks| rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c (\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar| b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18 )|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3| m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)| vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|của bạn|zeto|zte\-)" 1;
}
và đoạn mã còn lại ở vị trí /:
đặt $mobile_rewrite do_not_perform;
nếu ($mobile_agent = 1){
đặt $mobile_rewrite thực hiện;
}
nếu ($mobile_agent = 1){
đặt $mobile_rewrite thực hiện;
}
#kiểm tra nếu truy vấn arg = yes (example.com?mobile=yes), đặt biến
nếu ($arg_mobile = 'có') {
add_header Set-Cookie mobile=yes;
đặt $mobile_rewrite thực hiện;
}
#kiểm tra nếu cookie di động=có, hãy đặt biến
nếu ($cookie_mobile = 'có') {
đặt $mobile_rewrite thực hiện;
}
#kiểm tra xem cookie di động có=không, ngắt
nếu ($cookie_mobile = 'không') {
đặt $mobile_rewrite do_not_perform;
}
#kiểm tra xem truy vấn arg = no (example.com?mobile=no), ngắt
nếu ($arg_mobile = 'không') {
add_header Set-Cookie mobile=no;
}
#if $mobile_rewrite = thực hiện, chuyển hướng
nếu ($mobile_rewrite = thực hiện) {
viết lại ^.*(?<!/?amp=1)$ $scheme://www.cnx-software.es$request_uri?amp=1 break;
}
Tôi vẫn gặp rắc rối với các chuyển hướng bị mắc kẹt trong một vòng lặp. Ví dụ: https://www.cnx-software.es/2021/08/31/arm-china-ahora-es-totalmente-independiente-de-arm/?amp=1?amp=1&=1?amp=1&=1 ?amp=1&=1?amp=1&=1?amp=1&=1...
Vấn đề có lẽ là dòng viết lại, nhưng tôi đã có thể xác định chính xác vấn đề.