2012-12-11 33 views
6

Hy vọng rằng ai đó có thể thấy những gì tôi đang làm sai, nhưng đây là những câu chuyện ...Di chuyển nhân vật từ URL với htaccess

URL của trang web hiện tại của tôi được tự động tạo ra bởi các phần mềm thương mại điện tử từ tên sản phẩm và chủng loại, do đó, nếu tên sản phẩm/danh mục bao gồm một ký tự không phải là chữ và số, điều này được mã hóa trong URL mà là một cơn đau. EG:

mysite.com/Shop/Furniture-Set-Large-Table%2C-4-Chairs.html 

Tôi đang chuyển sang giải pháp thương mại điện tử mới, cũng tự động tạo URL từ tên sản phẩm nhưng đủ thông minh để xóa tất cả các ký tự không phải chữ và số. Nó cũng chuyển đổi thành chữ thường, mà tôi đã quản lý để tìm một giải pháp htaccess để chuyển hướng chữ hoa thành chữ thường. Nó cũng không có phần 'Cửa hàng' của URL mà tôi cũng đã quản lý để giải quyết qua htaccess. EG:

mysite.com/furniture-set-large-table-4-chairs.html 

Để loại bỏ phần 'Shop':

RedirectMatch 301 ^/Shop/(.*)$ http://www.mysite.com/$1 

Để thay thế chữ hoa với chữ thường để ngăn chặn một lỗi 404:

RewriteCond %{REQUEST_URI} [A-Z] 
RewriteCond %{REQUEST_FILENAME} !\.(?:png|gif|ico|swf|jpg|jpeg|js|css|php|pdf)$ 
RewriteRule (.*) ${lc:http://www.mysite.com/$1} [R=301,L] 

Những cả hoạt động hoàn hảo.

Vì vậy, tôi cần một quy tắc htaccess, hoặc có thể một vài, để loại bỏ các ký tự được mã hóa này khỏi URL. Tôi không cần phải thay thế chúng, chỉ cần loại bỏ chúng, bởi vì phần mềm tạo ra các URL là "Bảng% 2C-4-Ghế" - vì vậy chỉ cần% 2C cần loại bỏ.

tôi cần phải loại bỏ bảng mã ký tự nhất định từ URL, chẳng hạn như:

dấu phẩy (% 2C), dấu nháy đơn (% 27), dấu hai chấm (% 3A) vv

bất cứ ai có thể tư vấn cho một quy tắc hoặc quy tắc htaccess phù hợp cho điều này?

Xin cảm ơn trước.

Trả lời

4

URI là url-giải mã trước khi nó được gửi thông qua công cụ viết lại, vì vậy bạn muốn để phù hợp với nhân vật thực tế và không đối được mã hóa của họ:

tình trạng
RewriteRule ^(.*),(.*)$ /$1$2 [L] 
RewriteRule ^(.*):(.*)$ /$1$2 [L] 
RewriteRule ^(.*)\'(.*)$ /$1$2 [L] 
RewriteRule ^(.*)\"(.*)$ /$1$2 [L] 
# etc... 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule ^(.*)$ http://www.mysite.com/$1 [L,R=301] 

Các chuyển hướng cho phép mod rewrite biết rằng nếu bất kỳ các quy tắc trên đã được áp dụng (do đó làm cho giá trị trạng thái chuyển hướng nội bộ = 200) sau đó chúng tôi cần chuyển hướng, nhưng chúng tôi sẽ không đạt được phần đó cho đến khi xóa tất cả các kiểm tra ký tự đặc biệt.

Bạn muốn tất cả các quy tắc này trước bất kỳ chuyển hướng nào để quy tắc có thể lặp và loại bỏ nhiều phiên bản của bất kỳ ký tự nào trong số đó. Sau đó, khi không còn ký tự đặc biệt nào nữa, công cụ viết lại có thể nhỏ xuống đến nơi chuyển hướng của bạn.

Tôi khuyên bạn nên xóa chỉ thị mod_alias RedirectMatch và thay thế bằng quy tắc viết lại. Đôi khi kết hợp 2 mô-đun và có cả hai mô-đun ảnh hưởng đến một URI đơn lẻ có thể dẫn đến kết quả không mong muốn. nên trước tất cả các quy tắc trên, bạn phải:

RewriteRule ^Shop/(.*)$ /$1 [L] 

thêm việc loại bỏ các /Shop/ trong chuỗi ký tự đặc biệt.Sau đó, quy tắc cuối cùng của bạn sẽ tuân theo:

RewriteCond %{REQUEST_URI} [A-Z] 
RewriteCond %{REQUEST_FILENAME} !\.(?:png|gif|ico|swf|jpg|jpeg|js|css|php|pdf)$ 
RewriteRule (.*) ${lc:http://www.mysite.com/$1} [R=301,L] 
+0

Xem bài đăng gốc của tôi, tôi đã chỉnh sửa nó để hiển thị những gì tôi có trong tệp .htaccess. Bây giờ một số - mặc dù không phải tất cả - URL trong phần mềm mới từ một cái gì đó như mysite.com/parent-category/sub-category/baby-category/ đến mysite.com/../sub-category/baby-category/. Nếu tôi hoàn nguyên tập tin htaccess mới về phiên bản gốc, điều này không xảy ra, vì vậy nó chắc chắn phải là thứ mà bộ quy tắc htaccess này đang gây ra. Bất kỳ ý tưởng tại sao? –

+0

Xin chào. Tôi sẽ loại bỏ http://www.------.com/final-cut-pro/no-quartz-extreme0-vram/" virtualsets

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