لماذا يتم إعادة توجيه ملف .htaccess الخاص بي إلى مسار الخادم الكامل بدلاً من المسار النسبي؟
-
23-09-2019 - |
سؤال
لم أواجه أي مشكلة مع CakePhP من قبل ، ولكن هناك شيء غريب حول هذا الخادم ويتسبب في إعادة التوجيه في ملفات .htaccess للتصرف بشكل غريب.
يستخدم CakePhP mod_rewrite في ملفات .htaccess لإعادة توجيه الطلبات إلى مجلد Webroot الخاص بها. المشكلة هي أن عمليات إعادة التوجيه تدرج المسار الخاطئ وتسبب خطأ 404. تطبيق CakePhP الخاص بي ، الذي يتم تخزينه في دليل القوائم ، يحتوي على ملف .htaccess على النحو التالي:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [R=301,L]
RewriteRule (.*) app/webroot/$1 [R=301,L]
</IfModule>
"
من المفترض أن يعيد توجيه أي طلب من http://hostname.com/~username/listings/
ل http://hostname.com/~username/listings/app/webroot/
ومع ذلك ، بدلاً من مجرد إضافة "app/webroot/
"إلى النهاية كما من المفترض ، فإنه يضيف مسار الخادم الكامل ( /home/username/public_html/listings/app/webroot/
) مما أدى إلى عنوان URL النهائي http://hostname.com/home/username/public_html/listings/app/webroot/
وهو أمر غير صحيح بشكل واضح ويؤدي إلى خطأ 404.
الاستضافة موجودة على حساب استضافة مشترك ، بحيث يحد من ما يمكنني فعله بالإعدادات. لم أر هذا أبدًا يحدث من قبل ، وأعتقد أنه شيء خاطئ من جانب الاستضافة من الأشياء ، ولكن إذا كان لدى أي شخص بعض الاقتراحات المفيدة ، فيمكنني وضعها في شركة الاستضافة أيضًا.
المحلول
يمكن العثور على حل سؤالك في أسفل هذا صفحة في كتاب Cakephp:
بالنسبة للعديد من خدمات الاستضافة (Godaddy ، 1and1) ، يتم تقديم خادم الويب الخاص بك بالفعل من دليل مستخدم يستخدم Mod_Rewrite بالفعل. إذا كنت تقوم بتثبيت CakePhP في دليل مستخدم (http://example.com/~username/cakephp/) ، أو أي بنية url أخرى تستخدم بالفعل mod_rewrite ، ستحتاج إلى إضافة عبارات إعادة كتابة إلى ملفات .htaccess التي يستخدمها CakePhp (/.htaccess ، /app/.htaccess ،/app/webroot/.htaccess).
لقد قمت بنشر CakePhP من مجلد Public_HTML الخاص بملف التعريف الخاص بي. اضطررت إلى تغيير 3 نفس ملفات .htaccess المذكورة أعلاه. فقط اضف RewriteBase /~username/
إلى ملفات .htaccess بعد ذلك RewriteEngine on
!
نصائح أخرى
حاول إزالة .htaccess من الملف الرئيسي ... لقد عملت بالنسبة لي
كان الأمر بسيطًا جدًا (باستخدام مضيف Uolhost المشترك):
تحرير كلا ملفات .htaccess:
/webroot/.htaccess
/
أضف السطر التالي: rewritebase /
هنا هو ملف /webroot/.htaccess الكامل:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]