Khi tôi truy cập một url không tồn tại có phần mở rộng .php, tôi nhận được trang lỗi ngnix 404, tuy nhiên, url không có phần mở rộng .php sẽ hoạt động như mong đợi khi sử dụng try_files. Trường hợp 404 được xử lý thông qua ứng dụng php.
Nó đã xảy ra kể từ khi tôi thêm mã này vào đề xuất
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
trả lại 404;
}
Lý do thêm điều này là để sửa lỗi trong nhật ký: FastCGI đã gửi trong thiết bị lỗi chuẩn: "Không xác định tập lệnh chính" trong khi đọc tiêu đề phản hồi từ thượng nguồn
Lỗi này xảy ra khi tôi truy cập tệp không tồn tại.php. Tôi đã đọc rất nhiều bài đăng về vấn đề liên quan đến việc thiếu 'SCRIPT_FILENAME' nhưng đây không phải là trường hợp của tôi.
ví dụ.conf
người phục vụ {
nghe 443 ssl;
nghe [::]:443 ssl;
server_name example.com;
gốc /var/www/ví dụ/công khai/công khai;
access_log /var/log/nginx/example.access.log main_ext;
error_log /var/log/nginx/example.error.log cảnh báo;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
bao gồm /etc/nginx/include.d/ssl.conf;
# ấu trùng
viết lại ^/index.php/(.*) /$1 vĩnh viễn;
vị trí = / {
try_files /page-cache/pc__index__pc.html /index.php?$query_string;
}
địa điểm / {
try_files $uri $uri/ /page-cache/$uri.html /index.php?$query_string;
}
vị trí ~ [^/]\.php(/|$) {
bao gồm /etc/nginx/include.d/php.conf;
fastcgi_pass unix:/var/run/php/php8.0-fpm-example.sock;
}
}
php.conf
# Kiểm tra tập tin tồn tại
try_files $uri =404;
# https://www.nginx.com/nginx-wiki/build/dirhtml/start/topics/examples/phpfcgi/
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
trả lại 404;
}
fastcgi_index index.php;
# Giảm thiểu lỗ hổng https://httpoxy.org/
fastcgi_param HTTP_PROXY "";
tắt fastcgi_intercept_errors;
# bao gồm cài đặt fastcgi_param
bao gồm fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
URL ví dụ:
https://example.com/foo - Hoạt động tốt hiển thị khá 404 bên trong ứng dụng php.
https://example.com/foo.php - Hiển thị ngnix 404 mặc định.