2008-11-11 23 views
11

Tôi đang tìm để chuyển đổi mod_rewrite quy tắc sau đây để các Nginx equivalent:Làm cách nào để chuyển đổi mod_rewrite (tùy chọn QSA) thành Nginx tương đương?

RewriteRule ^foo/(.*)$ /bar/index.php?title=$1 [PT,L,QSA] 
RewriteRule ^foo/*$ /bar/index.php [L,QSA] 

Cho đến nay tôi có:

rewrite ^foo/(.*)$ /bar/index.php?title=$1&$query_string last; 
rewrite ^foo/?$ /bar/index.php?$query_string break; 

Vấn đề là (tôi nghĩ!) Rằng chuỗi truy vấn không được nối thêm. Tôi đã không tìm thấy cách để chuyển đối số QSA sang Nginx.

Trả lời

5

Những quy tắc viết lại đưa ra các kịch bản làm việc:

rewrite ^/foo/([^?]*)(?:\?(.*))? /bar/index.php?title=$1&$2; 
rewrite ^/foo /bar/index.php; 
16

QSA là tự động trong nginx.

Nếu bạn không muốn, hãy thêm? đến cuối địa điểm mới của bạn

viết lại ^/foo /bar/index.php? Cuối cùng;

+0

nhận xét bị xóa – Zoltan

+1

Điều này là chính xác. Các tài liệu (tại http://nginx.org/en/docs/http/ngx_http_rewrite_module.html) nói: "Nếu một chuỗi thay thế bao gồm các đối số yêu cầu mới, các đối số yêu cầu trước đó được nối thêm sau chúng". (Lưu ý: "Nếu điều này là không mong muốn, hãy đặt một dấu chấm hỏi ở cuối chuỗi thay thế để tránh việc chúng được thêm vào") – Zoltan

Các vấn đề liên quan