Bộ tạo đường dẫn chuyển hướng Htaccess

Mỗi khi bạn di chuyển một blog, thay đổi cấu trúc URL hoặc hợp nhất các trang cũ, tệp .htaccess của Apache sẽ phải gánh chịu phần lớn công việc chỉnh sửa. Bộ tạo này có thể chuyển đổi mối tương ứng đơn giản giữa mã nguồn và mã đích thành các chỉ dẫn RewriteRule phù hợp với các flag cần thiết, sẵn sàng để sử dụng ngay trong tệp .htaccess của trang web.

Cách tạo các quy tắc chuyển hướng

  1. 1

    Chọn loại chuyển hướng

    301: Duy trì vĩnh viễn cho các thao tác tối ưu hóa tìm kiếm an toàn; 302: Tạm thời dùng cho các bài kiểm tra A/B và chuyển hướng theo mùa.

  2. 2

    Nhập nguồn và đích

    Đường dẫn chính xác hoặc mẫu regex: đường dẫn cũ trở thành mẫu RewriteRule và URL mới trở thành đích chuyển hướng.

  3. 3

    Kiểm tra các flag

    Mỗi quy tắc tự động nhận đúng flag, `[R=301,L]` hoặc `[R=302,L]`, để khối lệnh hoạt động ngay với mod_rewrite.

  4. 4

    Sao chép các chỉ thị

    Khối dữ liệu được tạo ra sẽ được đặt vào phần `<IfModule mod_rewrite.c>` của tệp .htaccess.

Các lệnh mod_rewrite và mod_alias

Apache cung cấp hai mô-đun dành cho việc chuyển hướng; hãy chọn phù hợp với mức độ phức tạp của quy tắc.

Hướng dẫn lựa chọn

Yêu cầu Sử dụng Ví dụ
URL cũ chính xác → URL mới chính xác Redirect Redirect 301 /old /new
Tiền tố wildcard RedirectMatch RedirectMatch 301 ^/blog/(.*)$ /articles/$1
Khớp theo chuỗi truy vấn RewriteRule Xem bên dưới
Bắt buộc HTTPS RewriteRule RewriteCond %{HTTPS} off + quy tắc
Có điều kiện (trình duyệt, cookie) RewriteRule Kết hợp với RewriteCond

Ví dụ: yêu cầu sử dụng giao thức HTTPS với địa chỉ www

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Ví dụ: di chuyển /blog/post-123 sang /articles/post-123

RewriteEngine On
RewriteRule ^blog/(.*)$ /articles/$1 [L,R=301]

Các cờ (flag) bạn sẽ thấy

  • L, cuối cùng, không tiếp tục xử lý các quy tắc khác.
  • R=301 hoặc R=302, chuyển hướng bằng mã trạng thái đó.
  • NC, không phân biệt chữ hoa và chữ thường.
  • QSA, thêm chuỗi truy vấn gốc vào URL mới.
  • NE, không mã hóa lại các ký tự đặc biệt trong đích đến.

Các lỗi phổ biến

  • Bỏ quên RewriteEngine On, nếu không có nó thì mọi RewriteRule đều không có tác dụng.
  • Mặc định dùng 302, Google coi đây là tạm thời, do đó URL cũ vẫn giữ nguyên thứ hạng.
  • Chuyển hướng theo chuỗi (cũ → trung gian → cuối cùng), luôn hướng tới chỉ một bước nhảy; mỗi bước nhảy thêm làm mất giá trị liên kết (link equity) và tăng độ trễ.

Câu hỏi thường gặp

Hãy sử dụng mã chuyển hướng 301 cho các thay đổi vĩnh viễn như di dời trang web, thay đổi tên dạng tắt của URL hoặc nâng cấp sang giao thức HTTPS. Chỉ sử dụng mã chuyển hướng 302 trong các trường hợp tạm thời, chẳng hạn như chuyển hướng đến trang bảo trì hoặc thực hiện phân bổ thử nghiệm A/B. Các công cụ tìm kiếm truyền các tín hiệu về thứ hạng trên mã chuyển hướng 301 một cách đáng tin cậy, nhưng không phải trên mã chuyển hướng 302.

Nguyên nhân phổ biến nhất là quên dấu gạch chéo đầu tiên trong mẫu. Trong RewriteRule, mẫu khớp với đường dẫn mà không có dấu gạch chéo đầu (ví dụ: ^blog/); trong Redirect (mod_alias), mẫu lại bắt đầu bằng dấu gạch chéo (ví dụ: /blog). Không nên lẫn lộn hai quy ước này.

Đúng vậy – hãy sử dụng RewriteCond %{QUERY_STRING} ^id=123$ trước khi sử dụng RewriteRule. Phương thức chuyển hướng đơn giản không đọc chuỗi truy vấn; chỉ RewriteRule mới có thể khớp với nó.

Đúng vậy, trong mỗi yêu cầu tiếp theo, Apache sẽ đọc lại tệp .htaccess; không cần khởi động lại máy chủ. Nếu không có phản ứng nào xảy ra, hãy kiểm tra xem biến AllowOverride All có được thiết lập trong file vhost của thư mục đó hay không.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác