Redirect Link
Cấu hình redirect URL từ source URL sang redirect URL với 301/302. Truy cập bằng đường dẫn trực tiếp.
Redirect Link (/redirectlink) cho phép admin cấu hình redirect URL: khi user vào source URL, frontend tự redirect về redirect URL với HTTP status 301/302.
Vị trí menu admin
Tính năng không có item cố định trong sidebar. Người dùng truy cập bằng URL trực tiếp /redirectlink.
Component: pages/RedirectLinkPage.tsx → features/redirectlink/list/RedirectLinkList.tsx + form/RedirectLinkForm.tsx.
Phân biệt với CMS Redirects
Module CMS có thể có entity tên gần giống. So sánh:
/redirectlink (Customization) | CMS Redirects | |
|---|---|---|
| Mục đích | Generic URL → URL redirect | Redirect đặc thù CMS (page slug đổi). |
| Repository | RedirectLinkRepository | Có thể là entity con của CMS Page. |
| Source type | Custom + 301/302 | Có thể nhiều loại hơn. |
Hiện tại 2 hệ tồn tại song song; khi cấu hình redirect, cần xác định rõ đang dùng hệ nào để tránh trùng rule.
Giao diện danh sách
<PageDataTable> (tableColumnToggleKey: "redirect-link") cột:
| Cột | Key | Width | Ghi chú |
|---|---|---|---|
| ID | id | 50 | center, toggletype: ignore. |
| Source URL | source_url | 200 | URL gốc cần redirect. |
| Redirect URL | redirect_url | 200 | URL đích sau redirect. |
| Source type | source_type | 100 | Render getSourceType(source_type).label (Custom / Auto / ...). |
| Redirect type | redirect_type | 100 | Render getRedirectType(redirect_type).label (Permanent 301 / Temporary 302). |
| Trạng thái | status | 100 | Tag màu. |
| Actions | trigger | 125 | Edit + Delete. Quyền thao tác phụ thuộc vào cấu hình quyền backend của tenant. |
Header có nút Thêm mới để tạo redirect rule.
Form (modal RedirectLinkFormModal)
| Field | Tên | Required | Loại |
|---|---|---|---|
| Source type | source_type | ✓ | <FormSelect> từ getSourceTypeList(). Default SOURCE_TYPE_CUSTOM. Required message error_source_type_required. |
| Source URL | source_url | ✓ | <Input>. Required message error_source_url_required. |
| Redirect type | redirect_type | ✓ | <FormSelect> từ getRedirectTypeList(). Default REDIRECT_TYPE_PERMANENT (301). |
| Redirect URL | redirect_url | ✓ | <Input>. Required message error_redirect_url_required. |
| Trạng thái | status | - | <FormSelect>. Default STATUS_ENABLE nếu trống. |
Submit qua RedirectLinkRepository.saveRemote(payload). Lỗi prefix redirectlink:form.error. Success message common:form.success.save.
FormChangedContext - tracking thay đổi để warning leave page.
Khi nào dùng
- Migrate URL cũ sang URL mới (rebrand, restructure category).
- Redirect campaign URL ngắn sang landing page.
- Permanent 301 cho SEO; Temporary 302 cho campaign tạm thời.
Các lối đi từ trang
- Module CMS Redirects (xem so sánh trên).
- Test redirect: paste source URL vào browser, verify redirect xảy ra với status code đúng.
Lưu ý - Lỗi thường gặp
- Redirect không xảy ra: kiểm tra (1) status Enable, (2) source URL khớp pattern (path tuyệt đối hay tương đối tuỳ implementation), (3) backend có hoạt động.
- Loop redirect: source URL trùng redirect URL, hoặc 2 record vòng tròn (A→B, B→A).
- 301 vs 302: 301 cache vĩnh viễn; 302 không cache. Chọn cẩn thận - sai là khó đảo (browser cache 301).
- Quyền thao tác: nếu không thấy hoặc không thực hiện được nút tạo/sửa/xoá, kiểm tra quyền cấu hình của tài khoản.
- Trùng với CMS Redirects: cùng tenant có thể có 2 hệ thống redirect khác nhau. Khi kiểm tra redirect, rà soát cả hai nơi để tránh rule chồng lấn.
Ai được xem và chỉnh?
- Mở
/redirectlink: tài khoản admin đã đăng nhập. - Tạo/sửa/xoá redirect: phụ thuộc quyền thao tác do backend cấu hình cho tenant.