2012-03-09 23 views
18

Tôi đang viết lại URL trong nginx sau khi khởi chạy lại. Trong trang web cũ, tôi đã có thông số truy vấn trong URL để lọc nội dung, ví dụ:Xóa tham số trong nginx viết lại

http://www.example.com/mypage.php?type=4 

Trang mới không có các loại thông số này. Tôi muốn để loại bỏ chúng và viết lại các URL đến trang chính, vì vậy mà tôi nhận được:

http://www.example.com/mypage/ 

viết lại quy tắc của tôi trong nginx là:

location ^~ /mypage.php { 
    rewrite ^/mypage.php$ http://www.example.com/mypage permanent; 
} 

Nhưng với quy tắc này tham số vẫn nối. Tôi nghĩ rằng $ sẽ ngăn nginx xử lý các giá trị khác ... bất kỳ ý tưởng nào? Tất cả các câu hỏi khác giải quyết cách thêm tham số - Tôi chỉ muốn xóa thông tin của tôi :)

Trả lời

33

Có một vấn đề tương tự, sau khi tìm kiếm câu trả lời được trình bày trong số rewrite docs.

Nếu bạn chỉ định? ở phần cuối của một viết lại thì Nginx sẽ thả $ args gốc (arguments)

Vì vậy, ví dụ bạn, điều này sẽ làm các trick:

location ^~ /mypage.php { 
    rewrite ^/mypage.php$ http://www.example.com/mypage? permanent; 
} 
+0

Bạn có kỹ năng đọc tốt hơn mình có;) Cảm ơn bạn rất nhiều! –

+10

Điều gì về tôi muốn thả một tham số cụ thể. – virsir

+0

chờ, quy tắc này có gây ra vòng lặp chuyển hướng không? – defbyte

6

Để thả một tham số từ URL, trong trường hợp này coupon=xxx:

if ($query_string ~ "^(.*)coupon=(.*)$") { 
    rewrite ^(.*)$ $uri? permanent; 
} 

Lưu ý rằng điều này sẽ thả tất cả các thông số nếu báo cáo kết quả phù hợp. $uri là yêu cầu ban đầu không có tham số.

2

Thử đặt biến số $args để trống bên trong vị trí.

set $args '';