Nginx Rewrite แปลง Querystring เป็น Path


11

ฉันต้องการกฎการเขียนซ้ำง่าย ๆ นี้:

/somefolder/mypage.aspx?myid=4343&tab=overview

ที่จะเปลี่ยนเส้นทางไปที่:

/folder/4343/overview/

ฉันมองหาวิธีแก้ปัญหาและไม่มีใครทำงานได้จริง ..

ฉันเหนื่อย:

rewrite ^/somefolder/mypage.aspx?myid=(.*)&tab=overview$  /folder/$1/overview  permanent;

และ

rewrite ^/somefolder/mypage\.aspx\?myid=(.*)&tab=overview$  /folder/$1/overview  permanent;

ผมทำอะไรผิดหรือเปล่า? ฉันได้รับ 404

(กฎที่ง่ายกว่าทำงานได้ดี .. )

ขอบคุณ

คำตอบ:


12

หากคุณต้องการเปลี่ยนเส้นทาง

location ~ /somefolder/mypage.aspx {
    if ($args ~* "^myid=(\d+)&tab=overview") {
        set $mid $1;
        set $args '';
        rewrite ^.*$ /folder/$mid/overview permanent;
    }
}

อย่าลืมกำหนดค่า / โฟลเดอร์ / $ 1 / ภาพรวมตำแหน่ง


ขอบคุณการเปลี่ยนเส้นทางใช้งานได้ แต่ไม่มีพารามิเตอร์ ($ 1) ... มันว่างเปล่า
YardenST

ฉันอัพเดตคำตอบแล้ว
Valery Viktorovsky

32

รุ่นที่สั้นกว่าและถูกต้องกว่าสำหรับคำตอบของ Valery Viktorovsky

location = /somefolder/mypage.aspx {
    if ($arg_tab != overview) { return 404; }
    if ($arg_myid !~ "^\d+$") { return 404; }
    rewrite ^ /folder/$arg_myid/overview? permanent;
}

หรือเฮ้มันอาจจะสั้นกว่านี้ได้หากคุณไม่จำเป็นต้องตรวจสอบข้อโต้แย้ง:

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;

ขอให้คุณมีโพสต์ก่อนหน้านี้ :) มันจะได้ช่วยฉันบางเวลา
YardenST

ฮ่า ๆ. คุณมีกฎมากมายเช่นนี้หรือไม่? ดีกว่าไม่สาย! นอกจากนี้ฉันจะได้รับการยอมรับแล้ว? :)
cnst

วิธีการแก้ปัญหา Valery ทำงานบรรทัดล่าง :) และอาจจะมีเพียงหนึ่งคำตอบ :)
YardenST

9
meta.stackexchange.com/questions/5234/ … « ให้แน่ใจว่านอกเหนือจากการทำงานให้คุณแล้วคำตอบก็คือแนวปฏิบัติที่ดีจริงๆ บางครั้งหลังจากคำตอบที่ได้รับการยอมรับอีกคนเข้ามาเปิดเผยความจริงที่ว่าก่อนหน้านี้ในความเป็นจริงแฮ็คที่ไม่ดี »อย่างจริงจังมีไม่เพียง แต่ปัญหาที่แตกต่างกันหลายคำตอบของ Valery! ทุกเส้นนั้นผิดอย่างยิ่งนอกเหนือไปจากเครื่องหมายปีกกา!
cnst
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.