0
0
Lập trình
TT

Sự Khác Biệt Giữa Redirect và Rewrite: Hướng Dẫn Chi Tiết

Đăng vào 2 tuần trước

• 5 phút đọc

Giới Thiệu

Trong quản lý website, việc xử lý URL là rất quan trọng. Hai cơ chế phổ biến để quản lý URL là redirectrewrite. Mặc dù có vẻ giống nhau, nhưng chúng phục vụ các mục đích khác nhau và có những ảnh hưởng khác nhau đến trải nghiệm người dùng, SEO và kiến trúc website.

Hướng dẫn này sẽ giúp bạn phân biệt rõ ràng giữa hai khái niệm này.

1. Redirect là gì?

Redirect là thông điệp gửi đến trình duyệt và các công cụ tìm kiếm rằng một URL đã chuyển từ vị trí này sang vị trí khác. Khi có redirect:

  • URL trong trình duyệt thay đổi.
  • Máy chủ phản hồi với mã trạng thái (thường là 301 cho redirect vĩnh viễn hoặc 302/307 cho redirect tạm thời).
  • Các công cụ tìm kiếm được chỉ định để lập chỉ mục URL mới thay vì URL cũ.

Ví dụ

Giả sử bạn đã chuyển một bài viết từ /old-blog-post sang /new-blog-post. Sử dụng redirect 301:

nginx Copy
location /old-blog-post {
    return 301 /new-blog-post;
}
  • Truy cập /old-blog-post sẽ tự động chuyển hướng người dùng đến /new-blog-post.
  • Google và các công cụ tìm kiếm khác sẽ chuyển các tín hiệu xếp hạng đến URL mới.

Các trường hợp sử dụng redirect

  1. Trang đã chuyển vĩnh viễn: Hợp nhất nội dung trùng lặp.
  2. Di chuyển tên miền: Chuyển từ example.com sang newdomain.com.
  3. URL cũ cho SEO: Đảm bảo rằng các liên kết cũ vẫn đưa người dùng đến trang chính xác.

2. Rewrite là gì?

Rewrite thay đổi URL nội bộ trên máy chủ mà không thay đổi những gì người dùng thấy trong trình duyệt của họ. Điều này cho phép một URL phục vụ nội dung từ một vị trí khác trên máy chủ trong khi giữ nguyên URL gốc.

Ví dụ

Bạn có tệp about.html, nhưng muốn URL là /about:

nginx Copy
location / {
    rewrite ^/about$ /about.html break;
    proxy_pass http://127.0.0.1:2368;
}
  • Truy cập vào /about sẽ lấy nội dung của /about.html.
  • URL trong trình duyệt vẫn là /about.
  • Người dùng và công cụ tìm kiếm thấy /about, không phải /about.html.

Các trường hợp sử dụng rewrite

  1. URL sạch: /about thay vì /about.html.
  2. Ứng dụng một trang (SPA): Tất cả các đường dẫn đều chỉ đến index.html nội bộ.
  3. Tái cấu trúc nội bộ: Di chuyển tệp trên máy chủ mà không làm gãy các URL công khai.
  4. Phục vụ nội dung từ nhiều đường dẫn: Ví dụ, phục vụ /blog/post từ /content/posts/post.html.

3. Những điểm khác biệt chính giữa Redirect và Rewrite

Tính năng Redirect Rewrite
URL trình duyệt Thay đổi sang URL mới Vẫn giữ nguyên
Mã trạng thái HTTP 301, 302, 307 200 OK (máy chủ phục vụ nội dung đã viết lại)
Tác động SEO Chuyển giao giá trị liên kết (301) URL gốc vẫn được lập chỉ mục
Trải nghiệm người dùng Người dùng được chuyển đến một URL mới URL trông không thay đổi
Hiệu suất Thêm một vòng lặp đến URL mới Xử lý nội bộ trên máy chủ
Sử dụng điển hình Trang đã di chuyển, URL chuẩn URL đẹp, định tuyến SPA, tái cấu trúc tệp nội bộ

4. Khi nào nên sử dụng cái nào?

Sử dụng Redirect khi:

  • Bạn đã di chuyển một trang vĩnh viễn và muốn các công cụ tìm kiếm lập chỉ mục vị trí mới (301).
  • Bạn muốn hợp nhất nội dung trùng lặp dưới một URL.
  • Bạn đang di chuyển tên miền hoặc thay đổi cấu trúc URL.

Sử dụng Rewrite khi:

  • Bạn muốn có một URL “đẹp” cho người dùng nhưng nội dung nằm ở nơi khác.
  • Bạn đang thực hiện định tuyến SPA, nơi nhiều đường dẫn chỉ đến cùng một trang.
  • Bạn muốn linh hoạt nội bộ mà không ảnh hưởng đến URL công khai.

5. Cách tiếp cận lai (Thực tiễn tốt nhất cho SEO)

Đôi khi, cách tiếp cận tốt nhất là kết hợp cả hai:

  1. Viết lại nội bộ để phục vụ nội dung linh hoạt.
  2. Chuyển hướng bên ngoài để thực thi các URL chuẩn cho SEO.

Ví dụ:

  • Bạn có một blog cũ /my-post-old và một blog mới /my-post.
  • Người dùng nhập /my-post-old sẽ thấy nội dung mới (viết lại nội bộ nếu cần).
  • Các công cụ tìm kiếm nên lập chỉ mục /my-post như là chuẩn (redirect 301 hoặc thẻ <link rel="canonical">).
nginx Copy
# Redirect blog cũ sang mới
rewrite ^/my-post-old$ /my-post permanent;

# Viết lại nội bộ cho URL sạch
rewrite ^/blog/(.*)$ /blog/index.php?post=$1 break;

6. Ví dụ thực tế

Tình huống 1: Di chuyển một blog

  • URL cũ: /blog/my-old-post
  • URL mới: /articles/my-old-post

Redirect (301):

nginx Copy
rewrite ^/blog/my-old-post$ /articles/my-old-post permanent;
  • Google cập nhật chỉ mục của nó.
  • Người dùng truy cập các liên kết cũ sẽ được chuyển đến bài viết mới.

Tình huống 2: Định tuyến SPA

  • URL /dashboard/settings nên phục vụ cùng một trang SPA.

Viết lại nội bộ:

nginx Copy
location / {
    try_files $uri /index.html;
}
  • URL trình duyệt vẫn là /dashboard/settings.
  • SPA xử lý định tuyến nội bộ.

Kết luận

  • Redirect dùng để di chuyển URL vĩnh viễn hoặc tạm thời. Chúng thay đổi URL trong trình duyệt và thông báo cho các công cụ tìm kiếm.
  • Rewrite dùng để phục vụ nội dung linh hoạt mà không thay đổi URL trong trình duyệt.
  • Đối với SEO, sử dụng redirect cho các URL cũ cần hợp nhấtrewrite cho các URL sạch hoặc định tuyến SPA.
  • Thường thì, một cách tiếp cận lai (viết lại nội bộ + redirect 301) sẽ mang đến trải nghiệm người dùng mượt mà và tối ưu SEO.

Cách tiếp cận này giữ cho website của bạn thân thiện với người dùng, linh hoạt cho các nhà phát triển và tối ưu cho các công cụ tìm kiếm.

Hãy cùng nhau xây dựng FreeDevTools, một bộ công cụ tập trung vào UI/UX giúp đơn giản hóa quy trình làm việc, tiết kiệm thời gian và giảm bớt khó khăn trong việc tìm kiếm công cụ/tài liệu.

👉 Khám phá ngay: FreeDevTools
⭐ Đánh dấu nó trên GitHub: freedevtools

Hãy để chúng ta cùng nhau cải thiện nó hơn nữa!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào