كيفية استخدام Errordocument لإعادة توجيه إلى ملف PHP في نفس المجلد؟
-
13-09-2019 - |
سؤال
أريد أن تأخذ طلبات الملفات المفقودة في مجلد معين وإعادة توجيههم إلى program.php. في هذا المجلد.
هذا برنامج وسأستخدمه كثيرا في أماكن مختلفة، وأفضل تجنب تحديد اسم المجلد في ملف HTACCESS.
لقد حاولت فقط وضع:
ErrordCument 404 program.php.
لكن النتيجة هي أن المتصفح فقط يطبع "program.php" ولا تنفذ البرنامج.
أفهم لماذا يحدث هذا: بناء على الوثائق في http://httpd.apache.org/docs/2.0/mod/core.html, ، يتم تفسير عنوان URL الذي لا يبدأ بساق أو HTTP كرسالة نصية.
والسؤال هو كيفية التجول حول هذا القيد لتتمكن من الوصول إلى نفس المجلد.
المحلول
انتهى بي الأمر باستخدام إعادة كتابة بدلا من ErrordCument:
rewriteEngine على rewriteCond٪ {replay_filename}! -F إعادة التحظير ^ (. +). JPG $ program.php؟ i = $ 1.jpg
يتحقق الخط الثاني من أن الملف غير موجود، بحيث يتم عرض الصور الموجودة بشكل صحيح.
نصائح أخرى
انت تريد:
ErrorDocument 404 /program.php
بحسب ال مستندات, ، "يمكن أن تبدأ عناوين URL مع مائل (/) لمسارات الويب المحلية (بالنسبة إلى المستندات)."
هل جربت مسارا (نسبي أو مطلق)؟ إذا قمت بإنصاع ذلك، فينبغي أن يكون في جذر الويب، مما قد يخدم غرضك.
ErrorDocument 404 /program.php
إذا كان لديك سوى عدد صغير من المجلدات، فمن المحتمل أن تستخدمه:
<Directory /path/a>
ErrorDocument 404 /a/program.php
</Directory>
<Directory /path/b>
ErrorDocument 404 /b/program.php
</Directory>
<Directory /path/c>
ErrorDocument 404 /c/program.php
</Directory>
إذا كان هذا غير عملي، فيجب أن يكون لديك برنامج واحد فقط .PHP في الجذر ولديه يستجيب بشكل مختلف وفقا لمحتويات متغير بيئة Redirect_urrl، وهو $ _Server ["Redirect_url"] في PHP.
لماذا لا يكون لديك مشكلة ثانية مقبض كل الأخطاء في جميع المجلدات؟ قد تكون أكثر نظافة بهذه الطريقة. يمكنك بعد ذلك التعامل مع الحالة الفردية باستخدام $ _Server ["presert_uri"] والتي يجب أن تحتوي على الطلب الأصلي إذا كنت أتذكر بشكل صحيح.
وماذا عن هذا. في مسار الجذر الخاص بك، قمت بإعداد ملف error.php عام. ومع ذلك، فإن كل شيء يقوم بتحليل الطلب، والتحقق من المسار، ومعرفة ما إذا كان هناك خطأ مخصص.php هناك، ويشمل ذلك. يمكن أن تعمل، هاه؟