Khi chạy WordPress trên nền tảng Nginx, lỗi rewrite là một trong những vấn đề phổ biến nhất mà quản trị viên web gặp phải. WordPress nginx rewrite lỗi thường biểu hiện dưới dạng trang trắng, lỗi 404 khi truy cập bài viết, hoặc URL không đúng cấu trúc permalink. Vấn đề này xuất phát từ cách Nginx xử lý các quy tắc rewrite khác với Apache. Bài viết này sẽ phân tích chi tiết từ nguyên nhân gốc rễ, các loại lỗi thường gặp, cho đến hướng dẫn khắc phục từng bước cụ thể, kèm cấu hình tối ưu cho WordPress trên Nginx.
Bản Chất Của Rewrite Trên Nginx Và Sự Khác Biệt Với Apache

WordPress sử dụng file.htaccess để quản lý các quy tắc rewrite khi chạy trên Apache. Tuy nhiên, Nginx không hỗ trợ.htaccess. Thay vào đó, Nginx dùng file cấu hình chính (thường là nginx.conf hoặc các file trong thư mục sites-available) với cú pháp riêng. WordPress nginx rewrite lỗi xảy ra khi cấu hình Nginx không map đúng các URL ảo (pretty permalinks) đến file index.php.
Trên Apache, quy tắc rewrite được đọc và thực thi động qua file.htaccess ở từng thư mục. Nginx đọc cấu hình một lần khi khởi động hoặc reload, do đó mọi thay đổi cần can thiệp thủ công vào file cấu hình. Điều này vừa là ưu điểm về hiệu năng, vừa là nguyên nhân gây ra lỗi nếu không cấu hình đúng.
Cơ Chế Hoạt Động Của Rewrite Trên Nginx
Nginx sử dụng directive try_files để kiểm tra sự tồn tại của file tĩnh trước khi chuyển request đến WordPress. Một cấu hình chuẩn cho WordPress trên Nginx thường như sau:
location / { try_files $uri $uri/ /index.php?$args;
}
Dòng này yêu cầu Nginx: nếu URI không phải là file thật ($uri) hoặc thư mục thật ($uri/), hãy chuyển request đến index.php cùng với các tham số query gốc. Lỗi phát sinh khi dòng này bị thiếu, sai thứ tự, hoặc bị ghi đè bởi các location block khác.
Các Dạng Lỗi WordPress Nginx Rewrite Thường Gặp
Trang chủ hoạt động bình thường, nhưng click vào bất kỳ bài viết nào cũng báo 404. Nguyên nhân là do thiếu hoặc sai try_files trong block location /.
Trang Trắng Hoặc Lỗi 500 Internal Server Error
Khi cấu hình rewrite sai cú pháp (ví dụ thiếu dấu chấm phẩy, thiếu dấu ngoặc), Nginx sẽ không thể reload và trả về lỗi 500. Một số trường hợp dẫn đến trang trắng nếu PHP-FPM không nhận request do rewrite dẫn sai đường.
URL Không Đúng Permalink Structure
Ví dụ bạn cấu hình permalink là /%postname%/, nhưng URL vẫn hiển thị dạng?p=123. Điều này thường do thiếu try_files hoặc do plugin bảo mật can thiệp, nhưng nguyên nhân chính vẫn là rewrite rule không mapping được.
Lỗi Khi Sử Dụng MultiSite
WordPress Multisite yêu cầu các quy tắc rewrite phức tạp hơn. Nếu không cấu hình đúng cho subdomain hoặc subdirectory, các site con sẽ báo lỗi 404 hoặc không load được asset.
Nguyên Nhân Cụ Thể Gây Ra Lỗi Rewrite Trên Nginx

Để khắc phục triệt để, cần hiểu rõ các nguyên nhân dưới đây:
- Thiếu hoặc sai try_files: Là nguyên nhân số một. Nhiều người copy cấu hình template nhưng thiếu dòng try_files.
- Xung đột location block: Nếu có nhiều location block (ví dụ cho wp-admin, wp-content), thứ tự ưu tiên của Nginx có thể ghi đè rewrite chính.
- Không enable PHP-FPM: Rewrite chỉ chuyển request đến index.php, nhưng nếu PHP-FPM không chạy hoặc cấu hình sai socket, sẽ không có kết quả.
- Lỗi syntax trong file cấu hình: Chỉ một dấu chấm phẩy thiếu cũng khiến Nginx không thể load cấu hình.
- Cache plugin hoặc CDN can thiệp: Một số plugin cache như W3 Total Cache hoặc WP Rocket có thể ghi đè rewrite, gây lỗi nếu cấu hình không tương thích.
- SSL redirect sai: Khi chuyển từ HTTP sang HTTPS, nếu không cập nhật rewrite rule, có thể gây vòng lặp redirect hoặc lỗi 404.
Hướng Dẫn Khắc Phục Lỗi WordPress Nginx Rewrite Chi Tiết
Quy trình khắc phục wordpress nginx rewrite lỗi cần thực hiện tuần tự, từ kiểm tra cấu hình cơ bản đến debug nâng cao.
Bước 1: Kiểm Tra File Cấu Hình Nginx
Truy cập file cấu hình của site (ví dụ /etc/nginx/sites-available/example.com). Tìm block server và location /. Đảm bảo có dòng:
location / { try_files $uri $uri/ /index.php?$args;
}
Nếu thiếu, thêm vào. Sau đó kiểm tra cú pháp bằng lệnh: nginx -t
Bước 2: Kiểm Tra Location Block Cho PHP
WordPress cần một location riêng để xử lý file.php. Cấu hình chuẩn:
location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
Đường dẫn socket có thể thay đổi tùy phiên bản PHP. Đảm bảo fastcgi_pass trỏ đúng.
Bước 3: Thêm Quy Tắc Cho Các Thư Mục Đặc Biệt
Để tránh xung đột, cần chặn rewrite cho các thư mục chứa file tĩnh:
location /wp-content/ { # default
}
location /wp-includes/ { # default
}
Các block này đảm bảo Nginx phục vụ file tĩnh trực tiếp mà không qua PHP.
Bước 4: Reload Nginx Và Kiểm Tra
Chạy lệnh: sudo systemctl reload nginx hoặc sudo nginx -s reload. Sau đó truy cập trang web và kiểm tra bài viết.
Bước 5: Xử Lý Khi Vẫn Còn Lỗi
Nếu lỗi tiếp diễn, hãy kiểm tra log lỗi Nginx: tail -f /var/log/nginx/error.log. Tìm dòng có từ khóa “rewrite”, “open()”, “404”. Đôi khi lỗi nằm ở quyền truy cập thư mục hoặc file index.php không tồn tại.
Cấu Hình Rewrite Cho WordPress Multisite Trên Nginx

Đối với Multisite dạng subdirectory, cấu hình rewrite phức tạp hơn. Cần thêm các quy tắc cho từng site con. Ví dụ cấu hình cho subdirectory:
location / { index index.php; try_files $uri $uri/ /index.php?$args;
} # Bắt buộc cho Multisite
if (!-e $request_filename) { rewrite ^/(wp-(content|admin|includes).) /$1 last; rewrite ^/.(/wp-..php)$ /$1 last; rewrite ^/.(/feed/?) /index.php?$args last;
}
Lưu ý sử dụng if trong Nginx không được khuyến khích, nhưng đây là ngoại lệ bắt buộc cho Multisite.
Sai Lầm Thường Gặp Khi Xử Lý Lỗi Rewrite Và Cách Tránh
- Sử dụng.htaccess trên Nginx: Hoàn toàn vô dụng, có thể gây nhầm lẫn. Hãy xóa hoặc đổi tên.htaccess.
- Copy cấu hình mẫu mà không hiểu: Mỗi cấu hình cần điều chỉnh theo đường dẫn thực tế của server.
- Quên cập nhật sau khi đổi permalink: WordPress tự thay đổi.htaccess trên Apache, nhưng trên Nginx bạn phải can thiệp thủ công vào file cấu hình.
- Không kiểm tra log lỗi: Log lỗi là nguồn thông tin quý giá để chẩn đoán chính xác nguyên nhân.
- Sử dụng quá nhiều if trong Nginx: Các câu lệnh if có thể gây suy giảm hiệu năng và xung đột. Chỉ dùng khi thực sự cần.
So Sánh Rewrite Trên Nginx Và Apache Cho WordPress
| Tiêu chí | Nginx | Apache |
|---|---|---|
| Cấu hình | Tập trung (file.conf) | Phân tán (.htaccess) |
| Hiệu năng | Cao hơn, đỡ tốn tài nguyên | Thấp hơn nếu có nhiều.htaccess |
| Khả năng tương thích | Yêu cầu cấu hình thủ công | Tự động (WordPress tự ghi.htaccess) |
| Khắc phục lỗi | Cần kiểm tra file cấu hình | Có thể sửa trực tiếp.htaccess |
| Bảo mật | Cao hơn do không có file phân tán | Thấp hơn nếu không cấu hình chặt chẽ |
Dù Nginx yêu cầu kỹ thuật cao hơn, nhưng hiệu năng và bảo mật vượt trội. WordPress nginx rewrite lỗi phần lớn xuất phát từ việc chưa quen với cách vận hành.
Các Lưu Ý Quan Trọng Khi Làm Việc Với Rewrite Trên Nginx
- Luôn backup file cấu hình trước khi sửa.
- Sử dụng nginx -t để kiểm tra cú pháp trước khi reload.
- Nếu dùng VPS, hãy chạy các lệnh với quyền root hoặc sudo.
- Đối với các trang lớn, nên kết hợp với cache plugin để giảm tải cho PHP.
- Kiểm tra phiên bản WordPress và Nginx để đảm bảo tương thích.
- Cập nhật PHP lên phiên bản mới nhất để tránh lỗi bảo mật và tương thích.
Câu Hỏi Thường Gặp Về WordPress Nginx Rewrite Lỗi
Tại sao rewrite trên Nginx khác với Apache?
Nginx thiết kế theo mô hình event-driven, không dùng module mod_rewrite. Thay vào đó, nó dùng try_files và các location block. Cú pháp linh hoạt hơn nhưng yêu cầu cấu hình thủ công trong file chính.
Làm thế nào để kiểm tra cấu hình Nginx có lỗi không?
Chạy lệnh nginx -t trên terminal. Nếu không có lỗi, bạn sẽ thấy thông báo “syntax is ok” và “test is successful”.
Có plugin nào giúp tự động sửa lỗi rewrite trên Nginx không?
Một số plugin như Nginx Helper (tạo bởi RTMedia) có thể hỗ trợ flush cấu hình cache, nhưng không tự động sửa lỗi rewrite. Bạn vẫn phải can thiệp vào file cấu hình server.
Lỗi 404 sau khi thay đổi permalink trên Nginx, xử lý thế nào?
Truy cập Dashboard WordPress, vào Settings -> Permalinks, chọn lại cấu hình mong muốn và click Save. Đồng thời kiểm tra file cấu hình Nginx đã có try_files chưa.
Multisite trên Nginx có dễ gặp lỗi rewrite không?
Có, vì cần thêm nhiều quy tắc rewrite phức tạp. Nếu không quen, dễ gây lỗi 404 cho các site con. Nên sử dụng subdomain thay vì subdirectory để dễ cấu hình hơn.
Kết Luận
WordPress nginx rewrite lỗi là vấn đề phổ biến nhưng hoàn toàn có thể khắc phục nếu hiểu đúng cơ chế hoạt động của Nginx. Nguyên nhân chủ yếu đến từ thiếu try_files, sai cấu trúc location block, hoặc lỗi syntax. Bằng cách kiểm tra file cấu hình, thêm đúng quy tắc rewrite, và thường xuyên kiểm tra log lỗi, bạn có thể giải quyết triệt để vấn đề. Nginx mạnh mẽ và hiệu quả hơn Apache nếu được cấu hình đúng. Nếu bạn mới bắt đầu, hãy sao lưu cấu hình cũ và thực hiện từng bước một để tránh ảnh hưởng đến toàn bộ hệ thống. Với hướng dẫn chi tiết trong bài viết này, hy vọng bạn đã có đủ kiến thức và giải pháp để xử lý mọi lỗi rewrite liên quan đến WordPress trên Nginx.
- WordPress REST API là gì? Hướng dẫn toàn diện từ cơ bản đến nâng cao cho người mới bắt đầu
- CDN hoạt động như thế nào? Giải mã cơ chế tăng tốc website toàn cầu
- Elementor Developer: Bí Quyết Trở Thành Chuyên Gia Phát Triển Website WordPress Chuyên Nghiệp
- Khắc phục WordPress Server Memory Error: Nguyên nhân và Giải pháp Toàn diện
- Tax WooCommerce Là Gì? Hướng Dẫn Toàn Diện Cách Thiết Lập Thuế Cho Cửa Hàng Online














