Nguyên nhân phát sinh url

Nguyên nhân phát sinh url
Lỗi 404 – Page Not Found do broken links gây ra thì chúng ta đã biết quá rõ.

Chúng phát sinh khi chúng ta đổi cấu hình đường dẫn Permalinks mà không thực hiện redirect link cũ sang link mới, hoặc do nội dung đã bị xóa khỏi website.

Tuy nhiên, còn có một nguyên nhân phát sinh lỗi 404 nữa – nguyên nhân nằm trên tính năng Custom Permalinks của WordPress, hay còn gọi là Pretty Permalinks!

Topic thuộc Chuyên đề SEO Website chuyên nghiệp!

Như đã biết, WordPress có một tính năng cực hay là cho phép tùy biến lại cấu trúc đường dẫn của nội dung rất linh hoạt:

Nguyên nhân phát sinh url

Tính năng này WordPress gọi là Pretty Permalinks – nó chỉ hoạt động khi Server bật chế độ mod_rewrite cho Website.

Đôi khi, trong quá trình cài đặt hosting hoặc chuyển website sang hosting khác (clone, migrate) thì cấu hình mod_rewrite trên file .htaccess bị lỗi, dẫn đến tính năng custom permalinks không hoạt động.

Khi đó, WordPress chỉ hỗ trợ duy nhất cấu trúc link dạng id của page/ post(Plain):

Nên, khi dùng dạng permalinks khác (Pretty Permalinks) tất cả pages/ posts/ comment… đều bị lỗi 404 hàng loạt!

Mục lục bài viết

    • Chế độ mod_rewrite là gì?
  • Hướng dẫn sửa lỗi 404 hàng loạt trên Website
    • 1. Kiểm tra cấu trúc Permalinks Plain
      • Nếu vẫn còn lỗi 404 hàng loạt?
    • 2. Reset Permalinks
    • 3. Cấu hình mod_rewrite thủ công
      • Bật mod_rewrite trong Apache, Litespeed Server
      • Bật mod_rewrite trong Nginx

Chế độ mod_rewrite là gì?

mod_rewrite là một module của Apache Webserver, cho phép viết lại đường dẫn của Website, từ địa chỉ động sang địa chỉ tĩnh!

Ví dụ từ địa chỉ dạng id (Plain structure):

  • https://vuihocweb.com/?p=123

Sang địa chỉ đẹp hơn (Pretty Permalinks):

  • https://vuihocweb.com/wordpress/sua-loi-404-hang-loat

Module mod_rewrite có thể được bật bằng cách khai báo lệnh vào file cấu hình .htaccess của mỗi website, nếu dùng Apache hoặc Litespeed Webserver.

Riêng VPS với LEMP stack – dùng Nginx Webserver: vì Nginx không có mod_rewrite nên không có file cấu hình .htacess, do đó, ta phải dùng lệnh riêng của Nginx tương ứng với mod_rewrite để bật tính năng Pretty Permalinks!

Tham khảo:

Các loại Webservers trên Hosting & VPS

Hướng dẫn sửa lỗi 404 hàng loạt trên Website

Bạn cần làm tuần tự bước 1, 2 và 3 cho đến khi fix được lỗi.

Vào Settings -> Permalinks, chọn lại cấu trúc mặc định là Plain, rồi Save changes!

Nguyên nhân phát sinh url

Nếu vấn đề đúng là lỗi mod_rewrite, thì lúc này các lỗi 404 không còn nữa, vì chúng ta đang dùng cấu trúc Permalinks mặc định, không phải Pretty Permalinks.

Nếu vẫn còn lỗi 404 hàng loạt?

Nếu đã chọn cấu trúc Plain mà vẫn còn lỗi 404 trên tất cả pages, posts.. thì vấn đề không phải do mod_rewrite, mà có thể do lỗi của theme hoặc plugins.

Hãy thử tắt lần lượt các plugins và đổi theme sang theme khác để nhận dạng theme hay plugins nào gây ra lỗi này rồi tìm giải pháp xử lý.

Cái này hiếm gặp, vì đa số lỗi 404 hàng loạt là do tắt mod_rewrite!

Sau khi xác nhận lỗi là do mod_rewrite chưa bật, chúng ta vào lại Settings -> Permalinks, chọn một cấu trúc Custom Permalinks bạn muốn (không phải Plain), rồi Save changes!

Nguyên nhân phát sinh url

Việc này giúp cập nhật lại thông tin mod_rewrite trên file .htaccess.

Sau đó bạn xóa cache trình duyệt, kiểm tra lại xem lỗi 404 hàng loạt có còn không.

Nếu đã fix thì OK! Xong, không cần làm bước bên dưới nữa!

3. Cấu hình mod_rewrite thủ công

Nếu ở bước thứ 2 ta chưa giải quyết được lỗi 404, thì cần cấu hình lại mod_rewrite một cách thủ công.

Bật mod_rewrite trong Apache, Litespeed Server

Ta cần vào thư mục chứa code, mở file .htacess vào thêm các đoạn code này, Save lại:

# BEGIN WordPress

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

</IfModule>

# END WordPress

Xong!

Giờ bạn cần vào Settings -> Permalinks, chọn cấu trúc mình muốn rồi Save changes! để cập nhật lại thông tin đường dẫn!

Check lại, 99% là lỗi 404 hàng loạt đã được fix, 1% còn lại thì lỗi nằm ở các plugins hoặc theme, bạn cần check kỹ hơn và tìm giải pháp khác!

Tìm file .htaccess ở đâu?

Mỗi Website dùng hosting hay vps với Webserver là Apache hoặc Litespeed cache đều có .htaccess trong thư mục chứa code.

Đối với WordPress, nó nằm trong thư mục chứa mã nguồn WordPress, cùng thư mục với file cấu hình wp-config.php!

Nguyên nhân phát sinh url

Nhưng thường File .htaccess sẽ bị ẩn để tránh chúng ta xóa nhầm, vậy nên nếu bạn không tìm thấy .htaccess, thì hãy tắt chế độ ẩn file hệ thống của File Manager (cPanel):

Nguyên nhân phát sinh url

Bật mod_rewrite trong Nginx

Khác với Apache (hoặc Litespeed Server), thì Nginx Webserve không có .htaccess, do đó muốn bật chế độ mode_rewrite, ta phải dùng các lệnh của Nginx.

Mở file cấu hình domain trên VPS, nằm trên đường dẫn etc/nginx/conf.d (ví dụ etc/nginx/conf.d/vuihocweb.com.conf):

Ở giữa đoạn code location / {.....}, thêm dòng lệnh mod_rewrite như sau:

location / {

        try_files $uri $uri/ /index.php?$args;

}

Xong rồi khởi động lại nginx là ok (dùng lệnh service nginx restart) !

(Mỗi khi thay đổi, thêm, xóa lệnh nginx, chúng ta cần restart nginx thì rules mới có hiệu lực, còn Apache thì không cần resta)

Tổng kết!

Lỗi 404 hàng loạt 99% là do không bật chế độ mod_rewrite trên hosting/ vps. Fix lỗi này khá đơn giản như đã hướng dẫn ở trê.

Hi vọng bài viết sẽ có ích cho những bạn mới làm quen với WordPress – Hosting – VPS, vì đôi khi những lỗi thế này khiến chúng ta điên đầu nhức óc mà không hiểu vì sao!

Xem thêm:

  • Hướng dẫn Quét Broken links và fix lỗi 404 trên WordPress