Mô Tả Lỗi
Bạn mở trang WordPress — hoặc trang quản trị — và thấy một trang trắng hoặc thông báo từ trình duyệt như:
500 Internal Server Error
Đôi khi trình duyệt hiển thị một trang lỗi chung chung. Đôi khi Apache hoặc Nginx hiển thị màn hình lỗi được định dạng riêng. Dù thế nào, server đã bị crash trước khi có thể gửi phản hồi thực sự. Đây là lỗi bao quát: server biết có gì đó sai, nhưng không nói rõ là gì.
Hầu hết lỗi 500 trên WordPress đều xuất phát từ một trong năm nguyên nhân — tất cả đều có thể khắc phục mà không cần cài lại.
Nguyên Nhân Gốc Rễ
- File
.htaccessbị hỏng hoặc không hợp lệ - Plugin bị lỗi hoặc không tương thích
- Sai phân quyền file/thư mục
- Lỗi PHP fatal (lỗi cú pháp, extension không tương thích)
- PHP memory limit bị vượt quá (kiểm tra error log trước)
Bước 1: Kiểm Tra PHP Error Log
Trước khi đụng vào bất cứ thứ gì, hãy lấy thông báo lỗi thực sự. Trang 500 không cho bạn biết gì cả — còn log thì cho bạn biết tất cả.
Thêm ba dòng này vào wp-config.php, phía trên dòng comment /* That's all, stop editing! */:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Tải lại trang bị lỗi, sau đó kiểm tra log:
# Log debug của WordPress
cat /var/www/html/wp-content/debug.log
# Hoặc PHP error log của server (đường dẫn thay đổi tùy distro)
tail -50 /var/log/php/error.log
tail -50 /var/log/apache2/error.log
Thông thường bạn sẽ thấy nội dung như Fatal error: Uncaught Error: Call to undefined function... hoặc Parse error: syntax error in /wp-content/plugins/some-plugin/file.php on line 42. Một dòng đó là đủ để chỉ thẳng vào thủ phạm.
Bước 2: Reset File .htaccess
File .htaccess bị hỏng là nguyên nhân phổ biến nhất gây ra lỗi 500 đột ngột — đặc biệt sau khi cập nhật WordPress core hoặc có plugin nào đó viết lại URL rules.
Kết nối qua FTP hoặc SSH, sau đó đổi tên file hiện tại:
cd /var/www/html
mv .htaccess .htaccess.bak
Tạo một file mới với nội dung WordPress mặc định:
cat > .htaccess <<'EOF'
# 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
EOF
Tải lại trang. Nếu hoạt động trở lại, file .htaccess cũ chính là vấn đề. Xóa file backup và tiếp tục.
Sau này bạn có thể tạo lại .htaccess sạch trực tiếp từ WordPress: vào Settings → Permalinks và nhấn Save Changes mà không cần thay đổi gì.
Bước 3: Vô Hiệu Hóa Tất Cả Plugin
Plugin là thủ phạm có khả năng cao thứ hai. Cách chẩn đoán nhanh nhất là vô hiệu hóa tất cả cùng lúc — dù bạn có vào được trang quản trị hay không.
Qua SSH hoặc FTP, đổi tên thư mục plugins:
mv /var/www/html/wp-content/plugins /var/www/html/wp-content/plugins_disabled
Tải lại trang. Hoạt động rồi? Thủ phạm là một plugin nào đó. Khôi phục lại thư mục:
mv /var/www/html/wp-content/plugins_disabled /var/www/html/wp-content/plugins
Bây giờ vào Plugins → Installed Plugins trong trang quản trị. Vô hiệu hóa từng plugin một, tải lại trang sau mỗi lần. Khi nào lỗi xuất hiện trở lại, plugin bạn vừa tắt chính là plugin bị lỗi.
Những plugin hay gây lỗi: plugin cache sau khi nâng cấp PHP, plugin SEO với URL rewrite rules phức tạp, và bất cứ thứ gì hook vào init hoặc shutdown.
Bước 4: Sửa Phân Quyền File và Thư Mục
Các file WordPress cần được web server đọc được — nhưng không được phép ghi bởi tất cả mọi người. Phân quyền quá thoáng như 777 trên file sẽ gây lỗi 500 trên bất kỳ server nào có cấu hình bảo mật chặt.
Phân quyền đúng chuẩn:
- Thư mục:
755 - File:
644 wp-config.php:600(bảo mật hơn)
Sửa hàng loạt bằng lệnh:
# Sửa phân quyền thư mục
find /var/www/html -type d -exec chmod 755 {} \;
# Sửa phân quyền file
find /var/www/html -type f -exec chmod 644 {} \;
# Khóa chặt wp-config.php
chmod 600 /var/www/html/wp-config.php
Cũng cần kiểm tra ownership. Trên Ubuntu/Debian user web server là www-data; trên CentOS/RHEL thường là apache:
chown -R www-data:www-data /var/www/html
Bước 5: Chuyển Sang Theme Mặc Định
Theme thường bị bỏ qua. Một theme vừa cập nhật hoặc được chỉnh sửa tay có thể làm sập trang mạnh không kém gì plugin lỗi — đặc biệt nếu ai đó đã sửa trực tiếp file functions.php trên server.
Đổi tên thư mục theme đang dùng để buộc WordPress bỏ qua nó:
mv /var/www/html/wp-content/themes/your-theme /var/www/html/wp-content/themes/your-theme_bak
WordPress sẽ tự động dùng theme mặc định đi kèm (Twenty Twenty-Four, hoặc theme nào đang được cài). Trang hoạt động rồi? Hãy kiểm tra file functions.php của theme để tìm lỗi cú pháp PHP — đây là nơi các vấn đề này thường ẩn náu.
Bước 6: Kiểm Tra Tương Thích Phiên Bản PHP
Các nhà cung cấp hosting nâng cấp PHP mà ít khi thông báo. Nếu server gần đây chuyển từ PHP 7.4 lên 8.1 hoặc 8.2, các plugin và theme được viết cho PHP cũ có thể bị lỗi nặng — và âm thầm.
Kiểm tra phiên bản hiện tại:
php -v
Quét error log để tìm Deprecated, Fatal error, hoặc Call to undefined function. Bất kỳ đường dẫn file cụ thể nào trong log đó chính là mục tiêu cần xử lý.
Trên shared hosting, hãy tìm PHP Selector trong cPanel hoặc Plesk. Hạ tạm về PHP 7.4 trong khi chờ tác giả plugin phát hành bản vá — hoặc chuyển sang plugin thay thế đang được bảo trì tích cực.
Kiểm Tra Sau Khi Sửa
Sau mỗi lần thử sửa:
- Mở trang trong cửa sổ ẩn danh/riêng tư để tránh cache trang lỗi
- Kiểm tra cả trang chủ (
https://yoursite.com/) và trang quản trị (https://yoursite.com/wp-admin/) - Kiểm tra PHP error log — không có mục mới nghĩa là bạn đã xong
- Sau khi sửa xong, tắt chế độ debug trong
wp-config.phpbằng cách đặtWP_DEBUGvềfalse
Phòng Ngừa
- Test trên staging, không phải production. Chạy cập nhật plugin, theme và PHP trên bản staging trước. Hầu hết lỗi 500 có thể tránh được chỉ với một giờ làm việc trên staging.
- Sao lưu .htaccess trước khi cài plugin mới. Bất kỳ plugin nào tuyên bố tăng hiệu suất hoặc cache trang có thể viết lại URL rules mà không cảnh báo.
- Bật debug log âm thầm. Giữ
WP_DEBUG_LOGbật nhưng tắtWP_DEBUG_DISPLAY. Bạn sẽ phát hiện vấn đề trước khi người dùng gặp phải. - Chạy kiểm tra sức khỏe định kỳ. Công cụ Site Health tích hợp của WordPress (Tools → Site Health) sẽ phát hiện các vấn đề cấu hình trước khi chúng trở thành lỗi 500.

