كيفية استخدام Errordocument لإعادة توجيه إلى ملف PHP في نفس المجلد؟

StackOverflow https://stackoverflow.com/questions/1668889

سؤال

أريد أن تأخذ طلبات الملفات المفقودة في مجلد معين وإعادة توجيههم إلى 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 هناك، ويشمل ذلك. يمكن أن تعمل، هاه؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top