Nginx Rewrite Chuyển đổi chuỗi truy vấn thành đường dẫn


11

Tôi thích quy tắc viết lại đơn giản này:

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

để được chuyển hướng đến:

/folder/4343/overview/

Tôi đã tìm kiếm một số giải pháp và không có giải pháp nào thực sự hiệu quả ..

Tôi đã thử:

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

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

Tôi đang làm gì sai? Tôi đang nhận 404

(quy tắc đơn giản hơn chỉ hoạt động tốt ..)

Cảm ơn

Câu trả lời:


12

Nếu bạn muốn chuyển hướng

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

Đừng quên cấu hình / thư mục / $ 1 / vị trí tổng quan.


Cảm ơn, chuyển hướng hoạt động, nhưng không có paramater ($ 1) ... nó trống
YardenST

Tôi cập nhật câu trả lời.
Valery Viktorovsky

32

Một phiên bản ngắn hơn và đúng hơn của câu trả lời Valery Viktorovsky.

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

Hoặc, hey, nó thậm chí có thể ngắn hơn, nếu bạn không cần phải xác minh các đối số:

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

ước gì bạn đã đăng nó sớm hơn :) nó sẽ giúp tôi tiết kiệm thời gian
YardenST

cười lớn. bạn đã có rất nhiều quy tắc như vậy? Dù sao thì thà muộn còn hơn không! Ngoài ra, sau đó tôi có thể chấp nhận? :)
cnst 16/03/13

Giải pháp Valery hoạt động mấu chốt :) và chỉ có thể có một câu trả lời :)
YardenST

9
meta.stackexchange.com/questions/5234/ khăn « Hãy chắc chắn rằng ngoài làm việc cho bạn, câu trả lời là thực hành tốt. Đôi khi sau khi câu trả lời được chấp nhận, một câu trả lời khác xuất hiện, phát hiện ra thực tế rằng câu trả lời trước đó thực sự là một vụ hack tồi. »Nghiêm túc mà nói, không chỉ có một, mà là một vài vấn đề khác nhau với câu trả lời của Valery! Mỗi dòng về cơ bản là sai, khác với các dấu ngoặc nhọn!
cnst 16/03/13
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.