Score:0

นามสกุล nginx 404 .php พร้อม fpm

ธง eg

เมื่อฉันไปที่ URL ที่ไม่มีอยู่จริงที่มีนามสกุล .php ฉันได้รับหน้าแสดงข้อผิดพลาด ngnix 404 อย่างไรก็ตาม url ที่ไม่มีนามสกุล .php จะทำงานตามที่คาดไว้โดยใช้ไฟล์ try_files โดยที่ 404 ถูกจัดการผ่านแอปพลิเคชัน php

มันเกิดขึ้นตั้งแต่ฉันเพิ่มรหัสนี้เป็น แนะนำ

fastcgi_split_path_info ^(.+?\.php)(/.*)$;
ถ้า (!-f $document_root$fastcgi_script_name) {
    กลับ 404;
}

เหตุผลในการเพิ่มสิ่งนี้คือเพื่อแก้ไขข้อผิดพลาดในบันทึก: ส่ง FastCGI ใน stderr: "ไม่ทราบสคริปต์หลัก" ขณะอ่านส่วนหัวการตอบสนองจากอัปสตรีม ข้อผิดพลาดนี้เกิดขึ้นเมื่อฉันไปที่ไฟล์ non-existent.php ฉันอ่านโพสต์จำนวนมากเกี่ยวกับปัญหาเกี่ยวกับ 'SCRIPT_FILENAME' ที่หายไป แต่นี่ไม่ใช่กรณีของฉัน

ตัวอย่าง.conf

เซิร์ฟเวอร์ {
  ฟัง 443 ssl;
  ฟัง [::]:443 ssl;

  server_name example.com;

  รูท /var/www/example/public/public;

  access_log /var/log/nginx/example.access.log main_ext;
  error_log /var/log/nginx/example.error.log เตือน;

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  รวม /etc/nginx/include.d/ssl.conf;

  #ลาราเวล
  เขียนใหม่ ^/index.php/(.*) /$1 ถาวร;
    
  ที่ตั้ง = / {
    try_files /page-cache/pc__index__pc.html /index.php?$query_string;
  }

  ที่ตั้ง / {
    try_files $uri $uri/ /page-cache/$uri.html /index.php?$query_string;
  }

  ตำแหน่ง ~ [^/]\.php(/|$) {
    รวม /etc/nginx/include.d/php.conf;
    fastcgi_pass ยูนิกซ์:/var/run/php/php8.0-fpm-example.sock;
  }
}

php.conf

# ตรวจสอบไฟล์ที่มีอยู่
try_files $uri =404;

# https://www.nginx.com/nginx-wiki/build/dirhtml/start/topics/examples/phpfcgi/
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
ถ้า (!-f $document_root$fastcgi_script_name) {
    กลับ 404;
}

fastcgi_index index.php;

# ลดช่องโหว่ https://httpoxy.org/
fastcgi_param HTTP_PROXY "";

ปิด fastcgi_intercept_errors;

# รวมการตั้งค่า fastcgi_param
รวม fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

ตัวอย่าง URL: https://example.com/foo - ใช้งานได้ดี แสดง 404 ภายในแอพ php https://example.com/foo.php - แสดงค่าเริ่มต้น ngnix 404

vautee avatar
kr flag
คุณช่วยเพิ่มตัวอย่าง URL เหล่านี้ที่ใช้ได้/ใช้ไม่ได้กับคำถามของคุณได้ไหม
eg flag
แน่นอนว่าฉันได้เพิ่มสิ่งเหล่านี้แล้ว
Score:1
ธง gr

หากคุณต้องการให้ประมวลผล URI เหล่านั้นเป็น URI อื่นๆ ที่ไม่มีอยู่ ให้เปลี่ยน try_files $uri =404; ไปที่ try_files $uri /index.php?$query_string; ในของคุณ php.conf ไฟล์.


หากแอป PHP ของคุณใช้ประโยชน์ได้จริง PATH_INFO ตัวแปร FastCGI (ซึ่งฉันสงสัย) คุณควรใช้

fastcgi_split_path_info ^(.+\.php)(/.+)$;

try_files $fastcgi_script_name /index.php?$query_string;

ตั้ง $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

(ดู นี้ ตั๋วติดตาม nginx)

eg flag
ฉันต้องการลบคำสั่ง if เพื่อส่งคืน 404 แต่ไม่จำเป็นอีกต่อไป แต่นั่นก็สมเหตุสมผลแล้วในตอนนี้
Ivan Shatsky avatar
gr flag
ฉันกำลังจะพูดถึงว่า `ถ้า { ... }` ไม่จำเป็นอีกต่อไปในขณะที่เขียนคำตอบ แต่ลืมมันไปซะ อย่างไรก็ตามคุณคิดออกเอง :)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา