سؤال

وإنجن إكس + PHP (على fastCGI) يعمل كبيرة بالنسبة لي. عندما كنت أدخل المسار إلى ملف PHP التي لا وجود لها، بدلا من الحصول على صفحة خطأ افتراضية 404 (الذي يأتي عن أي ملف هتمل صالح)، وأنا ببساطة الحصول على "لا ملف الإدخال المحدد".

وكيف يمكنني تخصيص هذه الصفحة خطأ 404؟

هل كانت مفيدة؟

المحلول

ويمكنك استخدام الخاصية error_page في إنجن إكس التكوين .

وعلى سبيل المثال، إذا كنت تنوي تعيين 404 صفحة الخطأ /404.html، استخدم

error_page 404 /404.html;

وضبط 500 صفحة الخطأ /500.html هو بنفس السهولة على النحو التالي:

error_page 500 /500.html;

نصائح أخرى

ويمكنك إعداد صفحة خطأ مخصصة لكل كتلة موقع في nginx.conf الخاص بك، أو صفحة خطأ عالمية للموقع ككل.

لإعادة توجيه إلى بسيطة 404 صفحة لم يتم العثور على موقع معين:

location /my_blog {
    error_page    404 /blog_article_not_found.html;
}

وموقع واسعة 404 الصفحة:

server {
    listen 80;
    error_page  404  /website_page_not_found.html;
    ...

ويمكنك إلحاق رموز الخطأ القياسية معا لديك صفحة واحدة لعدة أنواع من الأخطاء:

location /my_blog {
    error_page 500 502 503 504 /server_error.html
}

لإعادة توجيه إلى ملقم مختلف تماما، على افتراض كان لديك ملقم المسمى SERVER2 المنبع المحددة في الفقرة HTTP الخاص بك:

upstream server2 {
    server 10.0.0.1:80;
}
server {
    location /my_blog {
        error_page    404 @try_server2;
    }
    location @try_server2 {
        proxy_pass http://server2;
    }

دليل يمكن أن تعطيك مزيد من التفاصيل، أو يمكنك البحث جوجل لشروط nginx.conf وerror_page لأمثلة واقعية على شبكة الإنترنت.

كن حذرا مع بناء الجملة! سلحفاة كبيرة استخدمها بالتبادل، ولكن:

وerror_page 404 = /404.html;

وسيعود الصفحة 404.html مع رمز الحالة 200 (ل= لقد نقلت هذا إلى هذه الصفحة)

وerror_page 404 /404.html;

وسيعود الصفحة 404.html مع (الأصلي) رمز الخطأ 404.

https://serverfault.com/questions/295789/nginx -Return-الصحيحة الرؤوس مع خصيصا للخطأ وثائق

وو"error_page" معلمة يجعل إعادة توجيه، وتحويل طريقة طلب "GET"، فإنه ليس صفحة استجابة مخصصة.

وأسهل حل هو

     server{
         root /var/www/html;
         location ~ \.php {
            if (!-f $document_root/$fastcgi_script_name){
                return 404;
            }
            fastcgi_pass   127.0.0.1:9000;
            include fastcgi_params.default;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        }

وبالمناسبة، إذا كنت تريد إنجن إكس لمعالجة 404 الحالة التي تعرضها البرامج النصية PHP، تحتاج إلى إضافة

و[fastcgi_intercept_errors][1] on;

ومنها مثلا.

     location ~ \.php {
            #...
            error_page  404   404.html;
            fastcgi_intercept_errors on;
         }

لم تعد أوصى هذه الإجابات منذ try_files يعمل أسرع من if في هذا السياق. ببساطة إضافة try_files في كتلة موقع بى الخاص بك لمعرفة ما إذا كان الملف موجودا، وإلا إرجاع 404.

location ~ \.php {
    try_files $uri =404;
    ...
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top