ฉันได้แปลงกฎ mod_rewrite ของ Apache HTTPd ส่วนใหญ่ไปเป็นโมดูล HttpRewrite ของ nginx (ซึ่งเรียก PHP-FPM ผ่าน FastCGI ในทุกคำขอแบบไดนามิก) กฎง่ายๆ ที่กำหนดโดยสถานที่ที่ยากลำบากนั้นใช้ได้ผลดี:
location = /favicon.ico { rewrite ^(.*)$ /_core/frontend.php?type=ico&file=include__favicon last; }
ฉันยังคงประสบปัญหากับนิพจน์ทั่วไป ซึ่งแยกวิเคราะห์ใน mod_rewrite เช่นนี้ (โปรดทราบว่าฉันยอมรับเครื่องหมายสแลชต่อท้ายภายในกฎ รวมถึงการผนวกสตริงการสืบค้นต่อท้ายทุกคำขอ):
mod_rewrite
# File handler
RewriteRule ^([a-z0-9-_,+=]+)\.([a-z]+)$ _core/frontend.php?type=$2&file=$1 [QSA,L]
# Page handler
RewriteRule ^([a-z0-9-_,+=]+)$ _core/frontend.php?route=$1 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/$ _core/frontend.php?route=$1 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)$ _core/frontend.php?route=$1/$2 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/$ _core/frontend.php?route=$1/$2 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)$ _core/frontend.php?route=$1/$2/$3 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/$ _core/frontend.php?route=$1/$2/$3 [QSA,L]
ฉันคิดการกำหนดค่าเซิร์ฟเวอร์ต่อไปนี้สำหรับไซต์ แต่ฉันพบกฎที่ไม่ตรงกันหลังจากแยกวิเคราะห์คำขอ (เช่น GET /user/auth
):
พยายามเขียน nginx ใหม่
location / {
# File handler
rewrite ^([a-z0-9-_,+=]+)\.([a-z]+)?(.*)$ /_core/frontend.php?type=$2&file=$1&$3 break;
# Page handler
rewrite ^([a-z0-9-_,+=]+)(\/*)?(.*)$ /_core/frontend.php?route=$1&$2 break;
rewrite ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)(\/*)?(.*)$ /_core/frontend.php?route=$1/$2&$3 break;
rewrite ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)(\/*)?(.*)$ /_core/frontend.php?route=$1/$2/$3&$4 break;
}
คุณจะแนะนำอะไรในการจัดการกับตัวจัดการไฟล์ของฉัน (ซึ่งก็คือ filename.ext
) และตัวจัดการเพจของฉัน (ซึ่งเป็นคำขอเส้นทางเฉพาะที่มีคุณสมบัติสูงสุด 3 รายการที่กำหนดโดยเครื่องหมายทับ)
เนื่องจากฉันยังไม่ได้รับการตอบกลับจากสิ่งนี้ ฉันจึงไม่แน่ใจด้วยว่าสิ่งนี้จะแทนที่ตัวแยกวิเคราะห์ PHP ของฉันซึ่งกำหนดด้วย location ~ \.php {}
ซึ่งรวมอยู่ก่อนกฎการเขียนใหม่เหล่านี้หรือไม่
คะแนนโบนัสหากฉันสามารถแก้ไขปัญหาการแยกวิเคราะห์ได้โดยไม่จำเป็นต้องใช้กฎใหม่สำหรับคุณสมบัติเส้นทางแต่ละจำนวน