nginx bị lỗi 404 khi gõ địa chỉ có phân đoạn bằng dấu gạch chéo
Lỗi 404 trong Nginx khi truy cập vào các URL có phân đoạn bằng dấu gạch chéo thường xảy ra khi cấu hình Nginx không nhận diện đúng các đường dẫn đó, đặc biệt nếu cấu hình không được tối ưu cho các đường dẫn phức tạp.
Để giải quyết lỗi này, bạn có thể kiểm tra và chỉnh sửa cấu hình Nginx như sau:
Kiểm tra cấu hình root và try_files: Đảm bảo rằng đường dẫn root
hoặc alias
được chỉ định đúng, và sử dụng try_files
để kiểm tra các tệp trước khi trả về lỗi 404. Cấu hình cơ bản có thể như sau:
server {
listen 80;
server_name example.local;
root /path/to/your/root; # Đường dẫn tới thư mục gốc của website
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; # hoặc unix:/run/php/php7.x-fpm.sock nếu bạn sử dụng socket
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Kiểm tra ký tự gạch chéo: Đảm bảo rằng các tệp hoặc thư mục có dấu gạch chéo (/
) được định tuyến đúng với cấu hình try_files
. Cấu hình trên sẽ tìm kiếm tệp có tên tương ứng với URL; nếu không tìm thấy, nó sẽ chuyển hướng yêu cầu tới index.php
.
Kiểm tra phân đoạn đường dẫn (rewrite): Nếu bạn cần hỗ trợ rewrite cho các phân đoạn đặc biệt, bạn có thể thêm một quy tắc rewrite
phù hợp, như sau:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
Sau khi thay đổi cấu hình, hãy khởi động lại Nginx để áp dụng thay đổi:
sudo systemctl restart nginx
Nếu vẫn gặp lỗi, hãy kiểm tra log của Nginx (thường nằm tại /var/log/nginx/error.log
) để tìm hiểu thêm chi tiết và điều chỉnh cấu hình nếu cần thiết.