Hướng dẫn xử lý lỗi 403
Hướng dẫn này trình bày các nguyên nhân thường gặp nhất của lỗi 403 Forbidden trên website và cách xử lý.
1. Coraza WAF
Một trong những nguyên nhân phổ biến nhất là Coraza WAF chặn truy cập theo các quy tắc ModSecurity CoreRuleSet.
-
Vào Nâng cao > WAF trong panel điều khiển hosting.

-
Kiểm tra WAF có đang bật cho tên miền không. Tạm thời tắt nó, rồi kiểm tra website để xác nhận WAF có phải nguyên nhân không.
-
Nếu WAF là nguyên nhân:
- Không khuyến nghị: Để WAF tắt cho tên miền.
- Lựa chọn tốt hơn: Xác định chính xác quy tắc bị kích hoạt và chỉ tắt quy tắc đó.
-
Để tìm quy tắc:
- Bấm Xem nhật ký để mở nhật ký ModSecurity.
- Tìm yêu cầu 403 của bạn theo IP, thời gian hoặc chi tiết yêu cầu.
- Ghi lại Rule ID.
-
Vào Quản lý quy tắc của tên miền trong mục WAF:
- Tắt theo Rule ID: SecRuleRemoveByID
- Tắt theo thẻ: SecRuleRemoveByTag

-
Bật lại WAF và kiểm tra lại website.
2. WordPress
Các hệ quản trị nội dung như WordPress dùng tệp .htaccess có thể chặn truy cập.
-
Tạm thời đổi tên hoặc xoá tệp
.htaccesstrong thư mục gốc của website. -
Tạo một tệp thử đơn giản (ví dụ
index.php) và mở nó trên trình duyệt. -
Nếu tệp tải được, sự cố liên quan tới CMS.
-
Các cách khắc phục có thể:
- Tạm thời tắt các plugin WordPress.
- Khôi phục tệp
.htaccessmặc định. - Tìm trợ giúp trên diễn đàn của CMS hoặc Cộng đồng HiTechCloud.
3. Quyền tệp
Quyền sở hữu hoặc quyền truy cập tệp không đúng cũng có thể gây lỗi 403.
-
Mở Trình quản lý tệp và vào thư mục của tên miền.
-
Bấm Tuỳ chọn và bật các cột Chủ sở hữu và Nhóm.

-
Đảm bảo mọi tệp có cùng chủ sở hữu và nhóm.
-
Kiểm tra quyền của tệp và thư mục.
-
Nếu quyền sở hữu không đúng, dùng Tệp > Sửa quyền để khôi phục mặc định.
4. Tệp nhạy cảm
Mặc định, web server chặn truy cập các tệp nhạy cảm:
.git
composer.json
composer.lock
auth.json
config.php
wp-config.php
vendor
Nếu bạn chắc chắn muốn các tệp này truy cập được (không khuyến nghị), hãy sửa cấu hình VHost của tên miền.
Với OpenResty / Nginx:
# <!-- BEGIN EXPOSED RESOURCES PROTECTION -->
location ~* ^/(\.git|composer\.(json|lock)|auth\.json|config\.php|wp-config\.php|vendor) {
deny all;
return 403;
}
# <!-- END EXPOSED RESOURCES PROTECTION -->
Với Apache:
# <!-- BEGIN EXPOSED RESOURCES PROTECTION -->
<Directory <DOCUMENT_ROOT>>
<FilesMatch "\.(git|composer\.(json|lock)|auth\.json|config\.php|wp-config\.php|vendor)">
Require all denied
</FilesMatch>
</Directory>
# <!-- END EXPOSED RESOURCES PROTECTION -->