Bạn có thể đạt được điều này với nhiều bước, bằng cách phát hiện một tham số và sau đó chuyển tiếp sang bước tiếp theo và sau đó chuyển hướng đến đích cuối cùng
RewriteEngine On
RewriteCond %{QUERY_STRING} ^category=([^&]+) [NC,OR]
RewriteCond %{QUERY_STRING} &category=([^&]+) [NC]
RewriteRule ^index\.php$ $0/%1
RewriteCond %{QUERY_STRING} ^subcategory=([^&]+) [NC,OR]
RewriteCond %{QUERY_STRING} &subcategory=([^&]+) [NC]
RewriteRule ^index\.php/[^/]+$ $0/%1
RewriteCond %{QUERY_STRING} ^product=([^&]+) [NC,OR]
RewriteCond %{QUERY_STRING} &product=([^&]+) [NC]
RewriteRule ^index\.php/([^/]+/[^/]+)$ http://store.example.com/$1/%1/? [R,L]
để tránh tình trạng đôi OR
và, bạn có thể sử dụng
RewriteCond %{QUERY_STRING} (?:^|&)category=([^&]+) [NC]
như @TrueBlue đề xuất.
cách tiếp cận khác là tiền tố TestStringQUERY_STRING
bằng ký hiệu &
, và kiểm tra luôn
RewriteCond &%{QUERY_STRING} &category=([^&]+) [NC]
Kỹ thuật này (tiền tố các TestString) cũng có thể được sử dụng để thực hiện chuyển tiếp đã được tìm thấy thông số cho RewriteCond
tiếp theo. Điều này cho phép chúng ta đơn giản hóa ba quy tắc để chỉ một
RewriteCond &%{QUERY_STRING} &category=([^&]+) [NC]
RewriteCond %1!&%{QUERY_STRING} (.+)!.*&subcategory=([^&]+) [NC]
RewriteCond %1/%2!&%{QUERY_STRING} (.+)!.*&product=([^&]+) [NC]
RewriteRule ^index\.php$ http://store.example.com/%1/%2/? [R,L]
Các !
chỉ được sử dụng để tách các thông số đã được tìm thấy và sắp xếp lại từ QUERY_STRING
.
Nguồn
2013-01-13 21:32:56
Giải pháp dễ nhất là để PHP thực hiện chuyển hướng. – Gerben
@Gerben giả sử một người đang sử dụng PHP ...câu hỏi đã được cụ thể cho apache, có thể được sử dụng với bất kỳ số ngôn ngữ/khuôn khổ/etc. Đúng, sử dụng PHP (hoặc bất kỳ ngôn ngữ lập trình hoặc kịch bản nào khác) để thao tác các tham số URL có một số ưu điểm, nhưng câu hỏi này đặc biệt về apache/mod_rewrite. –
Trong trường hợp cụ thể này, OP dường như đang sử dụng PHP, vì RewriteRule chứa index.php. – Gerben