Cách khắc phục lỗi 404 trên WordPress khi trang chủ vẫn hoạt động

intermediate📝 WordPress2026-04-02| WordPress 5.0+, Apache 2.4 / Nginx 1.18+, Ubuntu/CentOS/Debian, PHP 7.4/8.x

Error Message

404 Not Found (Internal pages fail, homepage works)
#wordpress#lỗi 404#htaccess#nginx#permalinks

Vấn đề

Đây là một tình huống gây khó chịu nhưng rất phổ biến. Trang chủ WordPress của bạn tải hoàn hảo, nhưng mọi liên kết đến bài viết hoặc trang đều trả về lỗi 404 Not Found thông thường. Điều này thường xảy ra sau khi chuyển trang web, thay đổi tên miền hoặc cập nhật plugin. Trong hầu hết các trường hợp, máy chủ web đang tìm kiếm một thư mục hoặc tệp vật lý không tồn tại vì nó không biết cách xử lý "đường dẫn tĩnh" (pretty permalinks) như /blog/my-awesome-post/.

Cách khắc phục trong 60 giây

Hãy thử cách này trước. Nó giải quyết được vấn đề trong khoảng 90% trường hợp bằng cách buộc WordPress xây dựng lại các quy tắc định tuyến nội bộ.

  • Đăng nhập vào bảng điều khiển quản trị WordPress của bạn.
  • Đi tới Cài đặt > Đường dẫn tĩnh.
  • Đừng thay đổi bất kỳ cài đặt nào. Chỉ cần cuộn xuống dưới cùng và nhấp vào Lưu thay đổi.
  • Tải lại trang đang bị lỗi của bạn. Nếu nó hoạt động, các quy tắc ghi lại (rewrite rules) của bạn vừa rồi chỉ bị mất đồng bộ. Nếu không, hãy tiếp tục đọc.

Tại sao điều này lại xảy ra?

  • Thiếu tệp .htaccess: Tệp điều hướng lưu lượng truy cập đến index.php bị thiếu hoặc bị hỏng.
  • Mod_Rewrite đang tắt: Máy chủ Apache của bạn chưa được bật module cần thiết để xử lý các URL tùy chỉnh.
  • Cấu hình bị ghi đè: Máy chủ được thiết lập để bỏ qua các tệp .htaccess cục bộ.
  • Cấu hình Nginx: Nginx không sử dụng .htaccess và yêu cầu một quy tắc cụ thể trong tệp cấu hình của trang web.

Khắc phục lỗi trên máy chủ Apache

1. Tạo lại tệp .htaccess thủ công

Đôi khi WordPress không có đủ quyền để ghi vào máy chủ của bạn. Nếu mẹo "Lưu thay đổi" thất bại, bạn sẽ cần thực hiện thủ công. Sử dụng FTP hoặc Trình quản lý tệp của hosting để tìm thư mục gốc của bạn. Tạo một tệp tên là .htaccess và dán mã tiêu chuẩn này vào:

# BẮT ĐẦU 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>
# KẾT THÚC WordPress

Đảm bảo quyền truy cập tệp được thiết lập thành 644. Điều này cho phép máy chủ đọc tệp trong khi vẫn giữ an toàn trước các chỉnh sửa trái phép.

2. Kích hoạt Rewrite Module

Nếu bạn tự quản lý VPS (như DigitalOcean hoặc Linode), rewrite module có thể đã bị tắt. Hãy chạy các lệnh sau để bật nó lên:

sudo a2enmod rewrite
sudo systemctl restart apache2

3. Cập nhật VirtualHost (AllowOverride)

Máy chủ của bạn có thể đang bỏ qua hoàn toàn tệp .htaccess. Hãy mở tệp cấu hình trang web của bạn, thường nằm tại /etc/apache2/sites-available/000-default.conf. Tìm khối <Directory> cho thư mục web của bạn và đảm bảo AllowOverride được đặt thành All:

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Lưu tệp và khởi động lại Apache để áp dụng các thay đổi.

Khắc phục lỗi trên máy chủ Nginx

Nginx không nhận diện các tệp .htaccess. Nếu các trang nội bộ của bạn trả về lỗi 404, có khả năng khối server block của bạn đang thiếu logic rewrite. Hãy mở tệp cấu hình Nginx (ví dụ: /etc/nginx/sites-available/your-site).

Tìm khối location / và đảm bảo nó bao gồm chỉ thị try_files:

location / {
    try_files $uri $uri/ /index.php?$args;
}

Dòng này hướng dẫn Nginx tìm kiếm tệp hoặc thư mục trước. Nếu không tìm thấy, nó sẽ chuyển yêu cầu đến index.php. Luôn kiểm tra cấu hình trước khi khởi động lại:

sudo nginx -t
sudo systemctl reload nginx

Các trường hợp đặc biệt cần lưu ý

Sự can thiệp của Plugin bảo mật

Các plugin như iThemes Security hoặc Wordfence thường bảo vệ tệp .htaccess bằng cách đặt nó ở chế độ "chỉ đọc". Nếu bạn không thể lưu cài đặt đường dẫn tĩnh, hãy thử tạm thời hủy kích hoạt các plugin này để xem tệp có thể ghi lại được hay không.

Môi trường phát triển cục bộ (WAMP/XAMPP)

Trên các thiết lập Windows hoặc Mac cục bộ, rewrite_module thường bị tắt theo mặc định. Nhấp vào biểu tượng Apache trong bảng điều khiển XAMPP/WAMP, tìm tệp httpd.conf, tìm kiếm mod_rewrite và xóa dấu # ở đầu dòng.

Cách xác minh việc khắc phục

  • Sử dụng Chế độ ẩn danh: Các trình duyệt thường lưu bộ nhớ đệm cho các phản hồi 404. Luôn kiểm tra trong cửa sổ riêng tư để đảm bảo bạn đang thấy trang web thực tế.
  • Kiểm tra Header: Sử dụng curl trong terminal của bạn để xem mã phản hồi của máy chủ:

curl -I https://yourdomain.com/sample-post/

    Kết quả bạn muốn thấy là `HTTP/1.1 200 OK`.
  - **Kiểm tra bằng kiểu "Cơ bản":** Đi tới **Cài đặt > Đường dẫn tĩnh** và đặt thành "Cơ bản" (Plain). Nếu các bài viết hoạt động ngay bây giờ, vấn đề chắc chắn nằm ở cấu hình rewrite của máy chủ.

Related Error Notes