هل يمكن أخفاء أمتداد الملف من الرابط بلغة php

لنفترض أن هذا رابط لتسجيل الدخول في موقعي

www.alkaser.com/login.php

كيف يمكن حذف او أخفاء الامتداد .php من الرابط أعلاه بدون أستخدام مكتبات خارجية أو أطر عمل يصبح بهذا اشكل

www.alkaser.com/login

يمكن عمل هذا بإنشاء مجلد باسم login ثم نضع ملف داخله بأسم index.php طريقه فعالة ولكنها تتطلب وضع الكثير من المجلدات بعدد صفحات الموقع وهذا شي لا ارغب بالقيام به

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

Adnane_Kadri أضف ردا

يقترح لخدمة نفس الغرض إنشاء نظام توجيه Routing يمكن من عليه تخصيص روابطنا بالشكل الذي نريده. بل ويقترح دوما عمل ذلك لأن من غير المفضل دوما إعطاء مستخدم الواجهة الأمامية فكرة عن بنية ملفات الواجهة الخلفية أو بنية قواعد البيانات لخطورة هاته الفكرة وإمكانية إستغلالها في ثغرات بالموقع، هذا بجانب أنها مزعجة وغير سهلة التذكر من قبل المستخدمين العوام.

لعمل نظام توجيه بسيط نقوم بالتالي:

  • إنشاء ملف رئيسي بالمجلد الرئيسي للموقع بإسم index.php
  • تقوم شيفرة بداخل هذا الملف بقراءة المسار الفرعي الذي يطلبه المستخدم، مثال : لو قام المستخدم بإرسال طلب GET إلى نقطة الوصول هاته : https://www.my-website.com/... تقوم الشيفرة بإستخراج my-route فقط.
  • بعد هذا يمكن بناء على السلسلة النصية المستخرجة تضمين الملف المستهدف وليكن my-route.php

مثال عملي :

لتكن بنية الملفات التالية:

my-project 
   | index.php
   | pages 
         | login.php
         | register.php

يحوي index.php الشيفرة التالية:

# جلب المسار الفرعي
$uri = trim($_SERVER['REQUEST_URI'], '/' );

# حذف اسم مجلد المشروع من المسار الفرعي
$uri = str_replace('my-project', '', $uri);

# استخراج السلسلة النصية مجردة من أي رموز
$uri = trim($uri,'/');

if($uri == 'login'){ require 'pages/login.php'; }
elseif($uri == 'register'){ require 'pages/register.php'; }

لاحظ ما الذي يحدث:

  • كل الطلبات تقع على ملف index.php
  • يقوم الملف بإستخراج الرابط الفرعي مجردا من إسم المجلد
  • يقوم بتضمين الملف المرافق

وبدل أن تبدوا الروابط كـ www.alkaser.com/login.php

ستبدوا كـ www.alkaser.com/login

هذا بجانب أن هاته الروابط صديقة لمحركات البحث، ذات شكل جميل سهل التذكر من قبل عوام المستخدمين.

بالطبع فإن هذا هو الشكل الأبسط تماما للعملية ولنظام التوجيه، يمكنك تطوير الفكرة لتسع المزيد من المميزات!

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

لم ينجح الامر اخي يظهر لي نوت فوند

وهذا المتخير لا يوجد فيه اي قيمة حاولة طباعته لاي وجد بداخله قيمه

echo $uri;

أخي الشكلة عندي السيرفر المحلي يتعامل مع مثل هذا الرابط

xx.com/login يتعامل معه على انه رابط يؤدي الى محلد باسم login ولما لايحد هذا المجلد يظهر لي نوت فوند ولا يشتغل الاسكربت الي في ملف index

تذكر هاته النقطة

كل الطلبات تقع على ملف index.php

مما يعني أنه يجب عليك تعديل ملف htaccess. ليدع كامل الطلبات تقع على هذا الملف.

إن لم يكن لديك ملف htaccess. قم بإنشاءه على نفس مستوى ملف index.php وضع القواعد التالية به:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME}  -f [OR]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^(.*)$ index.php [L,QSA]
</IfModule>

يعني هذا أن كامل الطلبات تقع على هذا الملف، قم بهذا وأعد تحديث الصفحة

ظهر لي هذا الخطاء عندما اضفت الكود لملف الهكسس، علما ان بداخل الملف اكواد اخرى شغاله مثل التحويل لصفحة 404

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at admin@email to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

هل تقوم بإستعمال هاته الشيفرة على الخادم المحلي localhost أو الإستضافة المشتركة؟

الخادم المحلي اخي

هل قمت بإستبدال my-project باسم مجلد ملفاتك الفرعي في هذا السطر ؟

# حذف اسم مجلد المشروع من المسار الفرعي
$uri = str_replace('my-project', '', $uri);
هل قمت بإستبدال my-project باسم مجلد ملفاتك الفرعي في هذا السطر ؟؟

ماذا تقصد بمجلد الملفات الفرعي، هل تقصد مجلد المشروع، او المجلد الذي اضع فيه الملفات المراد التوجيه اليها، ثم كود ملف هيكسس فيه خطاء او ان السيرفر المحلي لا يدعمه

ماذا تقصد بمجلد الملفات الفرعي، هل تقصد مجلد المشروع، او المجلد الذي اضع فيه الملفات المراد التوجيه اليها

مجلد الملفات الفرعي هو المجلد الحاوي لملفات مشروع .

لاحظ من المثال السابق:

my-project 
   | index.php
   | pages 
         | login.php
         | register.php

المجلد اسمه my-project ولذلك قمت بحذفه هنا:

# حذف اسم مجلد المشروع من المسار الفرعي
$uri = str_replace('my-project', '', $uri);
 ثم كود ملف هيكسس فيه خطاء او ان السيرفر المحلي لا يدعمه

من المستحيل أن لا يدعم خادم ما ملف htaccess. فهو الملف الذي يخبر الخادم كيف يقوم بقراءة الطلبات الموجهة إليه ، ولا أظن أن به خطأ لأن الملف يعمل لدي بشكل طبيعي . كما أنه قد تم جلب الملف من أحد مشاريع أكاديمية حسوب https://github.com/HsoubAca...

لم يشتغل اخي انا ابرمج من الجوال، وعندي سيرفرين محليين، واحد لم يدعم ملف هكسي كليا وبتاحهلع والاخر دعمه ولكن دعم بعض الاكواد وبعضها مثل الكود الذي ارسلته تبع هكسس يظهر لي هذا الخطاء

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at admin@email to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.

صباح الخير، أخي لقد نجح الامر، ذهبت ونسخت كود هكسس من مشروع اكتديميك حسوب ووضعته واشتغل رغم الكود الذي انت ارسلته هو نفسه الذي في المشروع، لا ادري لماذا هذا اشتغل وذاك لم يشتغل، المهم في حذه الحاله لهل يجب علي تعيين مسار لكل الملفات بما في ذلك مسارات الصور وغيرها، وشكرا لك اخي لقدر تعبتك معي، وحقيقه اليوم تقدمت خطوة كبيرة في مجال البرمجة وذلك بفضل الله ثم جهودك اخي

يمكنك إنشاء ملف .htaccess ومن ثم إعطاؤه تعليمات بشأن تغيير الurl كما بالشكل التالي

نبدأ أولاً بكتابة الأمر الذي يسمح بإعادة صياغة الرابط

RewriteEngine On 

ومن ثم نقوم بإعطاؤه الروابط التي نريد تغييرها كما نعطيه أيضاً الرابط الذي سيستبدل بها

RewriteRule sharaf sdxze.php

هنا لدينا صفحة تُسمى sdxze.php ولكن ﻻ نريد إظهارها للمستخدم بهذا الشكل , فبالتعليمة السابقة يمكن الوصول لتلك الصفحة عبر كتابة رابط الخادم ومن ثم كتابة sharaf بدلاً من sdxze.php

ويمكنك حذف صيغة الphp من جميع الملفات عند الرابط عن طريق التعليمة التالية

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

يمكنك تطبيق ما أخبرك به عدنان، وحل آخر عن طريق وضع ملف (قد يظهر مخفي لأن اسمه يبدأ بنقطة فتأكد من إظهر الملفات المخفية)

.htaccess

في المجلد الجذر لموقعك، يحوي التالي:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

سيتعرف المخدم على الإعدادت فيه، ويعدل الرابط الذي يعرض في المتصفح ويخفي اللحقة.

هكذا يتم تحويل الطلبات القادمة للمخدم وإضافة لاحقة لفتح الملف المناسب.

شكرا اخي، جربت مره ملف هكسس ولم يدعمه السيرفر المحلي

ربما كتبت اسمه بالخطأ

وحاول وضعه مباشرة ضمن htdocs والتجريب

ربما كتبت اسمه بالخطأ
وحاول وضعه مباشرة ضمن htdocs والتجريب

الان جربت بسيرفر اباتشي ودعم ملف هكسس وشغل هذه الاوامر

RewriteEngine On

RewriteRule log login.php

RewriteRule sig signup.php

RewriteRule sl php/nof.php

Options -Indexes

ErrorDocument 404 /error_404.php

ولكن الامر تبع اخفاء الامتداد الذي ارسلته لم يشتغل ويظهر خطاء في السيرفر ولا يظهر الموقع بسبب ظهور هذا الخطاء، اما كود الاخ تبع php لم يشتغل لا على السيرفر القديم والا الحديد اباتشي

يمكنك تصفح مشروع اكاديمية حسوب

يحوي على تطبيق لفكرة إدارة المسارات