2013-04-21 38 views
5

Tôi muốn sử dụng Apache mod_rewrite để có thể tận mỗi thư mục của một con đường như một tham số truy vấn cụ thể, ví dụ như xem xét những điều sau đây:Tên đường dẫn Apache mod_rewrite làm thông số truy vấn?

dụ cơ bản

Url yêu cầu: http://domain.com/shoes/prada/image-1/

trang phục vụ: http://domain.com/?cid=shoes&bid=prada&pid=image-1

Trong kịch bản này, có 3 thư mục con được yêu cầu (/shoes/, /prada/ sau đó image-1), vì vậy thư mục con đầu tiên được chuyển vào trang thực được phân phát dưới dạng cid, thứ hai là bid và thứ ba là pid.

Full dụ

Tuy nhiên, tôi cũng muốn nó để phục vụ cho một trang cụ thể tùy thuộc vào số lượng các thư mục con được yêu cầu, ví dụ

Url yêu cầu: http://domain.com/shoes/prada/

trang phục vụ: http://domain.com/shop.php?cid=shoes&bid=prada

Cho đến nay tất cả tôi đã quản lý để tìm thấy là regex dựa phù hợp cho mod_rewrite nhưng con đường của tôi sẽ thay đổi rất nhiều, đó là lý do tôi muốn có điều kiện dựa trên số lượng các thư mục được truy cập (xin lưu ý, tôi không giỏi với regex - tôi nghĩ rằng ký tự đại diện sẽ giúp ích cho việc này, nhưng tôi không chắc chắn nên bắt đầu từ đâu).

Bất kỳ trợ giúp nào về điều này sẽ được đánh giá rất nhiều! Điều này khá dài, vì vậy nếu bạn cần thêm thông tin để làm rõ, hãy cho tôi biết!

+0

@faa Ví dụ 1 chỉ đơn giản là để hiển thị các cơ sở của câu hỏi của tôi (ví dụ như các thông số lấy từ thư mục), trong khi 2 là để hiển thị một trang đang được phục vụ dựa trên số lượng các thông số. Bởi "số lượng các thư mục truy cập" Tôi có nghĩa là số lượng các thông số được truyền với ý tưởng rằng 1 thư mục = 1 tham số, như vậy/path/to/folder -> 1 = path, 2 = to, 3 = folder. – Kemebear

Trả lời

7

Với một chút công việc tôi đã có thể tinh chỉnh một số regex và nhận được một bộ quy tắc làm việc cho những gì tôi muốn:

RewriteEngine on 
RewriteRule ^(.*)/(.*)/(.*)/(.)?$ product.php?tid=$1&sid=$2&eid=$3 [L] 
RewriteRule ^(.*)/(.*)/(.)?$ brand.php?tid=$1&sid=$2 [L] 
RewriteRule ^(.*)/(.)?$ shop.php?tid=$1 [L] 

Đây là một chút khác nhau để ví dụ, tuy nhiên đó là những gì tôi dành cho ngay từ đầu.

này cho phép viết lại url của lên đến bốn thư mục sâu, với "tên" của mỗi thư mục được đưa ra như một tham số, và mỗi cấp thêm chiều sâu viết lại url tới một tài nguyên riêng biệt ví dụ:

http://x.com/shoes/prada/2011-high-heels/ -> http://x.com/product.php?tid=shoes&sid=prada&eid=2011-high-heels 

Thử nghiệm trên http://martinmelin.se/rewrite-rule-tester/

+1

Bạn có thể "chấp nhận" câu trả lời của riêng bạn. – leticia

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