2013-03-07 25 views
9

Tôi cố gắng chuyển hướng 301 bằng .htaccess.Sử dụng RewriteCond% {QUERY_STRING} mà không đính kèm chuỗi truy vấn vào địa chỉ mới

Vấn đề:

/?view=products&id=12345 -> /8831 

không có mối quan hệ giữa cái cũ và địa chỉ mới.

Đối với một số lý do

Redirect 301 /?view=products&id=12345 /8831 

không hoạt động. Nếu tôi xóa dấu chấm hỏi, nó hoạt động mà không có dấu chấm hỏi.

tôi cũng đã cố gắng:

RewriteCond %{QUERY_STRING} view=products&id=12345 
RewriteRule .*$ /8831 [L,R=301] 

nhưng nó chuyển hướng tôi đến /8831?view=products&id=12345, mà không phải là tốt cho tôi. Tôi không cần chuỗi truy vấn trong url- mới

Trả lời

18
RewriteCond %{QUERY_STRING} view=products&id=12345 
RewriteRule .*$ /8831? [L,R=301] 

Các kết thúc ? sẽ ngăn chặn các thông số truy vấn ban đầu từ được nối, trừ khi bạn cũng cung cấp cho các [QSA] cờ một lần nữa.

Từ the manual:

Lưu ý: Query String Các mẫu sẽ không được kết hợp với chuỗi truy vấn. Thay vào đó, bạn phải sử dụng RewriteCond với biến% {QUERY_STRING}. Tuy nhiên, bạn có thể tạo các URL trong chuỗi thay thế, có chứa một phần chuỗi truy vấn. Chỉ cần sử dụng dấu chấm hỏi bên trong chuỗi thay thế, để cho biết rằng văn bản sau đây nên được tiêm lại vào chuỗi truy vấn. Khi bạn muốn xóa chuỗi truy vấn hiện có, hãy kết thúc chuỗi thay thế bằng dấu chấm hỏi. Để kết hợp chuỗi truy vấn mới với chuỗi truy vấn cũ, hãy sử dụng cờ [QSA].