Redirect URL tiếng Hàn/Trung trên Cloudflare Pages: bẫy percent-encoding
Khi chuyển domain từ một site WordPress cũ sang site tĩnh mới trên Cloudflare Pages, tôi cần redirect các URL cũ có slug tiếng Hàn và tiếng Trung (ví dụ /ko/바이낸스-레퍼럴-코드/). Tưởng đơn giản, nhưng có một cái bẫy.
Vấn đề: percent-encoding phân biệt chữ hoa/thường
Trình duyệt gửi path đã mã hóa: /ko/%EB%B0%94%EC%9D%B4.... Tôi viết rule trong _redirects đúng chuỗi đó và nó chạy. Nhưng khi test bằng chữ thường (%eb%b0...), một số crawler gửi kiểu này, rule không khớp. Viết thêm rule chữ thường cũng không ăn thua. Request dạng UTF-8 thô cũng vậy.
Cách xử lý
- Chỉ giữ rule với hex chữ hoa, dạng mà trình duyệt và Googlebot gửi.
- Thêm splat fallback cho từng prefix cũ:
/ko/* / 301,/cn/* / 301. Mọi biến thể còn lại về trang chủ chứ không thành 404. - Đổi prefix ngôn ngữ cũ sang mới bằng splat:
/vn/* /vi/:splat 301. - Kiểm tra không rule nào che URL đang sống: chạy curl cho toàn bộ URL trong sitemap. Tất cả phải là 200 với 0 redirect.
for u in $(curl -s https://example.com/sitemap-0.xml | grep -o '<loc>[^<]*' | cut -c6-); do
curl -s -o /dev/null -w '%{http_code} %{num_redirects} '$u'\n' "$u"
done | grep -v '^200 0'
Kết quả
Mọi URL cũ redirect 301 trong 1 bước, URL mới không bị ảnh hưởng.
Site trong bài là RefCodeHub (https://refcodehub.com/vi/), một danh bạ mã giới thiệu sàn crypto bằng 15 ngôn ngữ do tôi vận hành (site có hoa hồng affiliate; bài này chỉ nói về kỹ thuật).
All rights reserved