it-swarm-vi.com

Thay đổi cấu trúc permalink - chuyển hướng trong htaccess phá vỡ các liên kết lưu trữ

Khi tôi bắt đầu với blog của mình, permalinks và cấu trúc sau:

http://<domain>/%year%/%monthnum%/%day%/%postname%/

Cách đây một thời gian, tôi đã thay đổi cấu trúc permalink thành "http://<domain>/%postname%/".

Để giải quyết các liên kết bên ngoài đến cấu trúc permalink cũ, tôi đã thêm dòng sau vào tệp htaccess của mình:

RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4

Bây giờ vấn đề là dòng chuyển hướng phá vỡ các liên kết lưu trữ, ví dụ. "http://<domain>/2010/09/02" được chuyển hướng đến trang đầu thay vì hiển thị các bài đăng từ ngày 2 tháng 9 năm 2010.

Có thể sửa chỉ thị chuyển hướng trong htaccess, hoặc tôi sẽ không thể ăn bánh và cũng có nó?

2
TFM

RedirectMatch của Mod_Alias ​​không mạnh bằng Mod_Rewrite. Nếu bạn có Mod_Rewrite trên Máy chủ của mình (Ví dụ: khá Permalinks sử dụng nó), bạn chỉ có thể thực hiện chuyển hướng nếu URL không ở định dạng liên kết Lưu trữ.

Để kiểm tra trường hợp đó, có RewriteCondNAME _ và để thực hiện lệnh redirect, có RewriteRule ... [R=301] chỉ thị.

Một ví dụ dựa trên dữ liệu của bạn:

RewriteCond %{REQUEST_URI} !^/((20|19)[0-9]{2})/([0-9]{2})/[0-9]{2}$ [NC]
RewriteRule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://<domain>/$4 [R=301,L]

Điều này chưa được kiểm tra nhưng tôi nghĩ nó nên làm việc. Tôi đã sử dụng bộ định lượng ({2}) để xác định rõ hơn số lượng bạn mong đợi. Bên cạnh đó trong RewriteCond tôi đã tạo một mẫu chỉ khớp với 20 .. và 19 .. năm.

Dòng đầu tiên (điều kiện, RewriteCondname__) kiểm tra không khớp với URL Lưu trữ và chỉ khi không khớp, quy tắc thực hiện chuyển hướng sẽ được thực thi. RewriteRulevề cơ bản hoạt động giống như chỉ thị RedirectMatchcủa bạn.

2
hakre