سؤال

هل هناك طريقة كيف يمكنني تكوين خادم ويب Apache لإرجاع رمز الخطأ 404 (غير موجود) بدلا من 403 (ممنوع) لبعض الدلائل المحددة التي أريد عدم السماح بها للوصول إليها؟

لقد وجدت بعض الحلول التي تشير إلى استخدام mod_rewrite، مثل

RewriteEngine On
RewriteRule ^.*$ /404 [L]

نظرا لأن الغرض من إرسال 404 بدلا من 403 هو توضيح بنية الدليل، فإن هذا الحل يكشف جدا، لأنه يعيد توجيه إلى بعض الموقع المختلفة مما يجعل من الواضح أن الدليل الذي تم الوصول إليه في الأصل في الواقع.

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

المحلول

إعادة التوجيه كما هو الحال في مثل

RedirectMatch 404 ".*\/\..*"

هل الحيلة، فإنها تحظر الوصول إلى جميع الملفات أو الدلائل التي تبدأ بطريقة، وإعطاء خطأ "404 غير موجود".

من دليل Apache: "خرائط توجيه إعادة التوجيه [Match] عنوان URL القديم في واحدة جديدة من خلال مطالبة العميل بإعادة دلالة المورد في الموقع الجديد." بشكل افتراضي، إعادة توجيه يرسل رمز الإرجاع 302، ولكن يمكن أيضا إرجاع رموز الحالة الأخرى كما هو موضح أعلاه.

نصائح أخرى

يمكنك أن تجعل شيئا مثل هذا:

.htaccess.

ErrordCument 403 /error/404.php.

404.ph.

<?php
$status = $_SERVER['REDIRECT_STATUS'] = 404;
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $status);
?>

404 Error

بعد وجود نفس المشكلة، انتهى بي الأمر باستخدام ملف .htaccess التالي

Options -Indexes
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain.com [NC]
RewriteRule ^(.*)/$ - [R=404,NC]

تضمن الخط الأول والثالث أنه لا يمكنك سرد محتوى المجلد، وإذا قمت بذلك، فستحصل على خطأ 404. ال rewritecond. يضمن التوجيه أن قاعدة إعادة الكتابة هذه تنطبق فقط على المجال الرئيسي. نظرا لأن لدي العديد من المجالات الفرعية، دون إعادة الترتيب، فإن الوصول إلى www.mydomain.com/subdomain كان أيضا إرجاع 404، وهو ما لم يكن ما كنت أقصده.

لتغيير أخطاء 403،400 إلى 404 أخطاء، ضع هذا في نهاية /etc/apache2/conf.d/localized-Error-Pages. أو في .htaccess.

# Will raise a 404 error, because the file <fake_file_for_apache_404.php> doesn't exist.
# We change 403 or 400 to 404 !
ErrorDocument 400 /fake_file_for_apache_404.php
ErrorDocument 403 /fake_file_for_apache_404.php
# We need to rewrite 404 error, else we will have "fake_file_for_apache_404.php not found"
ErrorDocument 404 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL <script type=\"text/javascript\">document.write(document.location.pathname);</script> was not found on this server.</p></body></html>"
ErrorDocument 500 "Server in update. Please comme back later."
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top