اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

الاخوة الكرام

اواجة مشكلة في اختصار الروابط في ملف htaccess حيث اني قمت بستخدام كل الطرق في الاختصار لكن لم تفلح

#RewriteEngine On
#RewriteBase /website/
#RewriteRule ^Details/([0-9]+)$ Details.php?t=$1 [L]
#RewriteRule ^Details/([0-9a-zA-Z_]+) Details.php?t=$1 [NC,L]

 

وهنا الطريقة الثانية

#RewriteEngine On
#RewriteRule ^Details$/?t=$1 [L] 

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

Recommended Posts

  • 1
نشر
بتاريخ 21 دقائق مضت قال m_sh:

لا استخدم ملف Nginx مطلقا

ارفقت لك الملف اخي الكرم محمد

htaccess 1.19 kB · 4 تنزيلات

لاحظ المشكلة كما وضحت لك أنك تستعمل كود أخر لإعادة التوجيه وتحديدا هذا هو الكود :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

ولهذا يتم التوجيه إلى العنوان :

 https://www.tecani44.com/Details/358.php

حيث يتم وضع php. في نهاية الرابط وبما أنه لايوجد هذا الملف تحدث تلك المشكلة .

وأيضا أنت تستخدم عدة أوامر RewriteEngine On وقواعد متكررة.

يمكنك تجربة إستخدام الكود التالي :

#For cut query string

RewriteRule ^Details/([^/]+)$ Details.php?t=$1 [L]
RewriteCond %{QUERY_STRING} t=(.*)
RewriteRule ^Details$.php$ /Details$-%1.html? [R=301,L]
RewriteRule ^Details$-([^?]*).html$ /Details$.php?t=$1 [QSA,L]

#for cut .php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]


#for check
<ifmodule mod_speling.c>

CheckSpelling On

</ifmodule>

<IfModule mod_headers.c>
    Header unset X-Powered-By
</IfModule>

<IfModule mod_headers.c>
    Header set X-Frame-Options: "sameorigin"
</IfModule>

# For message Erorr

Options -Indexes

ErrorDocument 404 https://www.Tecani44.com/404
ErrorDocument 403 https://www.Tecani44.com/403
ErrorDocument 500 https://www.Tecani44.com/500



#For serversignature
ServerSignature off


# DO NOT REMOVE THIS LINE AND THE LINES BELOW HOTLINKID:5ZlinWvz7G
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?tecani44.com/.*$      [NC]
RewriteRule .*\.(php)$ https://tecani44.com/Erorr [R,NC]
# DO NOT REMOVE THIS LINE AND THE LINES ABOVE 5ZlinWvz7G:HOTLINKID

 

  • 1
نشر

وعليكم السلام ورحمة الله وبركاته.

السؤال غير واضح قليلا هل تحاول إختصار جميع روابط الموقع أم فقط أى رابط يبدأ ب Details ؟ وهل تريد تحويل جميع الروابط إلى صفحة Details.php أم لا  ؟

أما الخطأ لديك فهو أولا بسبب أن القواعد كلها معلقة لأنها تبدأ بـ # لذا لن تعمل.وفي القاعدة الثانية النمط (pattern) غير متطابق مع ال replacement.

إذا كنت تريد تحويل الروابط من:

Details.php?t=123

إلى :

Details/123

فالحل الصحيح هو التالي :

RewriteEngine On
RewriteBase /website/

# القاعدة الأولى للأرقام فقط
RewriteRule ^Details/([0-9]+)$ Details.php?t=$1 [L]

# القاعدة الثانية للأحرف والأرقام والشرطة السفلية
RewriteRule ^Details/([0-9a-zA-Z_]+)$ Details.php?t=$1 [NC,L]

أما  إذا كنت تريد قاعدة واحدة تشمل جميع الحالات:

RewriteEngine On
RewriteBase /website/
RewriteRule ^Details/([^/]+)$ Details.php?t=$1 [L]

أما إذا كنت تريد حذف جميع الإمتدادات سواء php أو html من الموقع يمكنك قراءة الإجابة التالية :

 

 

  • 1
نشر
بتاريخ الآن قال m_sh:

نعم اريد تحويل جميع الروابط واخفاء querystring للحصول على مستوى افضل في الارشفة

يمكنك تجربة الأكواد التي أرفقتها لك في الإجابة السابقة ويجب أن تعمل معك .

إذا لم تعمل يرجى إخباري وإرسال الخطأ الذي يظهر لك.

  • 1
نشر
بتاريخ 2 دقائق مضت قال m_sh:

وبنسبة لكلمة website ماذا يقصد بها ؟ هل هو المجلد الخاص بالملفات لقسم محدد ؟ ام هو اسم الموقع ؟ لان سبق وكتبته بأسم الموقع ولم يفلح ويقوم بتحويلي الى صفحة خطا 500 

كلمة website هي إذا كان المجلد فرعي أى هكذا :

http://example.com/website/Details/123

إذا لم يكن لديك مجلد website إذا يجب حذفها . أما إذا كان لديك مجلد فرعي ولكن بإسم أخر يجب إستبدالها بإسم هذا المجلد . 

  • 1
نشر
بتاريخ 18 دقائق مضت قال m_sh:

نعم بأمكاني مشاركة الموقع https://www.tecani44.com/Details?t=358  هذا هو الموقع اخي الكريم محمد

الكود هذا في الاعلى يعمل ولكن في اذا كان بهذه الصيغة https://www.tecani44.com/Details/358 لن يعمل ويحولك الى الصفحة 500

هل تستعمل كود أخر في ملف htaccess لتحويل الرابط :

https://www.tecani44.com/Details?t=358

أو في ملف Nginx ؟

حيث يبدوا أنك بالفعل قمت بتحويل الرابط السابق إلى ملف Details.php مما يسبب تعارض .

يرجى إرفاق ملف htaccess كاملا للنظر إليه.

  • 1
نشر
بتاريخ 2 دقائق مضت قال m_sh:

بارك الله فيك وجزاك خير الجزاء 

ولكن الموقع جميعا اصبح يعتمد على صفحة Details وهي صفحة فرعية فقط ولا اريد تطبيقها في الروابط 

وإياكم اللهم أمين .

هل يمكنك توضيح ما معني يعتمد على صفحة Details ؟

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

  • 1
نشر
بتاريخ 4 دقائق مضت قال m_sh:

صفحة Details هي لعرض تفاصيل الموضوع مثلا اقوم بأنشاء موضوع يحمل id=5 عن الضغط على الرابط tecani.com/Details?  id=5 هذه هي صفحة الDetails ولكن الصفحة الرئيسية في الموقع هي index 

الصفحة الرئيسية تعمل دون أى مشكلة :

https://www.tecani44.com/index

وحتى صفحة حول الموقع و إتصل بنا جميعها تعمل دون أى مشاكل .

فقط الصفحة الخاصة بال Details وهي تفاصيل الموضوع الذي وضعته لهذا الموقع لا يعتمد على Details بل هذا هو الصحيح لأن المواضيع يجب أن تظهر في رابط Details وليس index.

  • 1
نشر
بتاريخ 8 دقائق مضت قال m_sh:

الاخ المهندس محمد ارغب باختصار الروابط لكن في صفحة الـAdmin وقمت بأنشاء ملف .htaccess ولكن واجهتني مشكلة ان الصفحات لاتستجيب في هذا الملف فهل اذا قمت بستخدامها في ملف الموقع الرئيسي سوف تعمل ؟

بتاريخ On 15‏/4‏/2025 at 12:14 قال محمد عاطف17:

 

نعم يرجى إستخدام ووضع الكود في ملف htaccess الرئيسي للموقع . والتأكد من وضع الكود في بداية الملف.

  • 1
نشر
بتاريخ منذ ساعة مضت قال m_sh:
RewriteBase Admin/dir/file
RewriteRule ^update/([0-9]+)$ update.php?t=$1 [L]
RewriteRule ^update/([0-9a-zA-Z_]+)$ update.php?t=$1 [NC,L]

قد قمت بكتابته بهذا الشكل ولكن لست متأكد من الجملة الاولى هل هي صحيحه اخي محمد ؟

RewriteBase الهدف منه تحديد المسار الأساسي الذي تُطبق عليه قواعد RewriteRule، ومن المفترض أن يكون مجلد وليس ملف.

بمعنى لو ملف .htaccess موجود في المسار public_html/Admin/dir/، فـ RewriteBase الصحيح سيكون /Admin/dir/. 

وتستطيع دمج القاعدتين في قاعدة واحدة:

RewriteEngine On
RewriteBase /Admin/dir/ 
RewriteRule ^update/([0-9a-zA-Z_]+)$ update.php?t=$1 [NC,L]

 

وسيتم توجيه مسارات مثل update/123 و update/abc و update/ID_456 بغض النظر عن حالة الأحرف إلى 

update.php?t=قيمة هنا

 

  • 1
نشر
بتاريخ 11 ساعة قال m_sh:

اعتذر عن التأخر في الرد مهندس مصطفى  ، قد قمت  بأنشاء ملف .htaccess اخر بجانب ملف update وملف up_img وفي مجلد Admin سوف ارفقة لتوضيح الاشكال

ستحتاج إذن إلى استخدام RewriteRule طالما الملف داخل مجلد فرعي Admin، لتحديد المسار النسبي للمجلد بالنسبة لجذر الموقع، فلو المجلد  موجود في /public_html/Admin/، فيجب كتابة RewriteBase /Admin/ وبدونها سيحاول الخادم البحث عن update.php في جذر الموقع بدلاً من داخل مجلد Admin.

مع حذف قاعدة منع الـ Hotlink لملفات PHP لأنها تسبب مشاكل كبيرة في أغلب الأحيان داخل أجزاء النظام.

RewriteEngine On
RewriteBase /Admin/

RewriteRule ^update/([0-9a-zA-Z_]+)$ update.php?t=$1 [NC,L]
RewriteRule ^up_img/([0-9a-zA-Z_]+)$ up_img.php?t=$1 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

<ifmodule mod_speling.c> CheckSpelling On </ifmodule> <IfModule mod_headers.c> Header unset X-Powered-By </IfModule> <IfModule mod_headers.c> Header set X-Frame-Options: "sameorigin" </IfModule>
Options -Indexes

ErrorDocument 404 /404
ErrorDocument 403 /403
ErrorDocument 500 /500

ServerSignature off

 

  • 0
نشر
بتاريخ 6 دقائق مضت قال محمد عاطف17:

وعليكم السلام ورحمة الله وبركاته.

السؤال غير واضح قليلا هل تحاول إختصار جميع روابط الموقع أم فقط أى رابط يبدأ ب Details ؟ وهل تريد تحويل جميع الروابط إلى صفحة Details.php أم لا  ؟

أما الخطأ لديك فهو أولا بسبب أن القواعد كلها معلقة لأنها تبدأ بـ # لذا لن تعمل.وفي القاعدة الثانية النمط (pattern) غير متطابق مع ال replacement.

إذا كنت تريد تحويل الروابط من:

Details.php?t=123

إلى :

Details/123

فالحل الصحيح هو التالي :

RewriteEngine On
RewriteBase /website/

# القاعدة الأولى للأرقام فقط
RewriteRule ^Details/([0-9]+)$ Details.php?t=$1 [L]

# القاعدة الثانية للأحرف والأرقام والشرطة السفلية
RewriteRule ^Details/([0-9a-zA-Z_]+)$ Details.php?t=$1 [NC,L]

أما  إذا كنت تريد قاعدة واحدة تشمل جميع الحالات:

RewriteEngine On
RewriteBase /website/
RewriteRule ^Details/([^/]+)$ Details.php?t=$1 [L]

أما إذا كنت تريد حذف جميع الإمتدادات سواء php أو html من الموقع يمكنك قراءة الإجابة التالية :

 

 

نعم اريد تحويل جميع الروابط واخفاء querystring للحصول على مستوى افضل في الارشفة

  • 0
نشر

وبنسبة لكلمة website ماذا يقصد بها ؟ هل هو المجلد الخاص بالملفات لقسم محدد ؟ ام هو اسم الموقع ؟ لان سبق وكتبته بأسم الموقع ولم يفلح ويقوم بتحويلي الى صفحة خطا 500 

  • 0
نشر
بتاريخ 5 دقائق مضت قال محمد عاطف17:

كلمة website هي إذا كان المجلد فرعي أى هكذا :

http://example.com/website/Details/123

إذا لم يكن لديك مجلد website إذا يجب حذفها . أما إذا كان لديك مجلد فرعي ولكن بإسم أخر يجب إستبدالها بإسم هذا المجلد . 

للاسف الشديد لم تفلح الطريقتين ولا اعلم ماهو السبب مباشرة عن تحويل رابط الصفحة من 

Details.php?t=123

وحذف ?t=123 يقوم بتحويلي الى صفحة الخطا 500

  • 0
نشر
بتاريخ 3 دقائق مضت قال m_sh:

للاسف الشديد لم تفلح الطريقتين ولا اعلم ماهو السبب مباشرة عن تحويل رابط الصفحة من 

Details.php?t=123
 

وحذف ?t=123 يقوم بتحويلي الى صفحة الخطا 500

هل يمكنك توضيح عنوان موقعك ؟ .

يمكنك تجربة الرابط التالي مثلا :

example.com/Details/123

هذا يجب أن يقوم بتحويلك إلى العنوان كما لو ذهبت إليه:

example.com/Details.php?t=123

لذلك إذا ذهبت إلى عنوان Details.php?t=123 وظهر لك خطأ 500 إذا هناك مشكلة لديك في الكود php ولا علاقة له بالتحويل .

  • 0
نشر
بتاريخ 11 دقائق مضت قال محمد عاطف17:

هل يمكنك توضيح عنوان موقعك ؟ .

يمكنك تجربة الرابط التالي مثلا :

example.com/Details/123

هذا يجب أن يقوم بتحويلك إلى العنوان كما لو ذهبت إليه:

example.com/Details.php?t=123

لذلك إذا ذهبت إلى عنوان Details.php?t=123 وظهر لك خطأ 500 إذا هناك مشكلة لديك في الكود php ولا علاقة له بالتحويل .

نعم بأمكاني مشاركة الموقع https://www.tecani44.com/Details?t=358  هذا هو الموقع اخي الكريم محمد

الكود هذا في الاعلى يعمل ولكن في اذا كان بهذه الصيغة https://www.tecani44.com/Details/358 لن يعمل ويحولك الى الصفحة 500

  • 0
نشر
بتاريخ منذ ساعة مضت قال محمد عاطف17:

هل تستعمل كود أخر في ملف htaccess لتحويل الرابط :

https://www.tecani44.com/Details?t=358

أو في ملف Nginx ؟

حيث يبدوا أنك بالفعل قمت بتحويل الرابط السابق إلى ملف Details.php مما يسبب تعارض .

يرجى إرفاق ملف htaccess كاملا للنظر إليه.

لا استخدم ملف Nginx مطلقا

ارفقت لك الملف اخي الكرم محمد

htaccess

  • 0
نشر

بارك الله فيك وجزاك خير الجزاء 

ولكن الموقع جميعا اصبح يعتمد على صفحة Details وهي صفحة فرعية فقط ولا اريد تطبيقها في الروابط 

  • 0
نشر
بتاريخ 2 دقائق مضت قال محمد عاطف17:

وإياكم اللهم أمين .

هل يمكنك توضيح ما معني يعتمد على صفحة Details ؟

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

صفحة Details هي لعرض تفاصيل الموضوع مثلا اقوم بأنشاء موضوع يحمل id=5 عن الضغط على الرابط tecani.com/Details?  id=5 هذه هي صفحة الDetails ولكن الصفحة الرئيسية في الموقع هي index 

  • 0
نشر

الاخ المهندس محمد ارغب باختصار الروابط لكن في صفحة الـAdmin وقمت بأنشاء ملف .htaccess ولكن واجهتني مشكلة ان الصفحات لاتستجيب في هذا الملف فهل اذا قمت بستخدامها في ملف الموقع الرئيسي سوف تعمل ؟

بتاريخ On 15‏/4‏/2025 at 13:14 قال محمد عاطف17:

هل يمكنك توضيح عنوان موقعك ؟ .

يمكنك تجربة الرابط التالي مثلا :

example.com/Details/123

هذا يجب أن يقوم بتحويلك إلى العنوان كما لو ذهبت إليه:

example.com/Details.php?t=123

لذلك إذا ذهبت إلى عنوان Details.php?t=123 وظهر لك خطأ 500 إذا هناك مشكلة لديك في الكود php ولا علاقة له بالتحويل .

الاستاذ محمد ارجوا المساعدة

  • 0
نشر
بتاريخ 3 دقائق مضت قال محمد عاطف17:

نعم يرجى إستخدام ووضع الكود في ملف htaccess الرئيسي للموقع . والتأكد من وضع الكود في بداية الملف.

RewriteBase Admin/dir/file
RewriteRule ^update/([0-9]+)$ update.php?t=$1 [L]
RewriteRule ^update/([0-9a-zA-Z_]+)$ update.php?t=$1 [NC,L]

قد قمت بكتابته بهذا الشكل ولكن لست متأكد من الجملة الاولى هل هي صحيحه اخي محمد ؟

  • 0
نشر
بتاريخ 38 دقائق مضت قال Mustafa Suleiman:

RewriteBase الهدف منه تحديد المسار الأساسي الذي تُطبق عليه قواعد RewriteRule، ومن المفترض أن يكون مجلد وليس ملف.

بمعنى لو ملف .htaccess موجود في المسار public_html/Admin/dir/، فـ RewriteBase الصحيح سيكون /Admin/dir/. 

وتستطيع دمج القاعدتين في قاعدة واحدة:

RewriteEngine On
RewriteBase /Admin/dir/ 
RewriteRule ^update/([0-9a-zA-Z_]+)$ update.php?t=$1 [NC,L]

 

وسيتم توجيه مسارات مثل update/123 و update/abc و update/ID_456 بغض النظر عن حالة الأحرف إلى 

update.php?t=قيمة هنا

 

ممتاز جدا

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

  • 0
نشر
بتاريخ 14 ساعة قال m_sh:

ممتاز جدا

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

يوجد مشكلة في تهيئة .htaccess أدى إلى الخطأ 500، وليس عملية إعادة الكتابة بحد ذاتها، فاختصار الروابط من خلال RewriteRule لا يؤدي إلى إيقاق الاستدعاء، ما يفعله عند وصول طلب بمسار معين /Admin/dir/update/123 إلى الخادم، تقوم قاعدة RewriteRule بإعادة كتابة المسار داخلياً إلى مسار آخر Admin/dir/update.php?t=123 قبل أن يقوم الخادم بتحديد الملف الذي سيقوم بتشغيله.

قم بإرفاق ملف htaccess لتفقده وتحديد ما تريد فعله بالضبط بشكل واضح.

  • 0
نشر
بتاريخ On 19‏/4‏/2025 at 15:55 قال Mustafa Suleiman:

يوجد مشكلة في تهيئة .htaccess أدى إلى الخطأ 500، وليس عملية إعادة الكتابة بحد ذاتها، فاختصار الروابط من خلال RewriteRule لا يؤدي إلى إيقاق الاستدعاء، ما يفعله عند وصول طلب بمسار معين /Admin/dir/update/123 إلى الخادم، تقوم قاعدة RewriteRule بإعادة كتابة المسار داخلياً إلى مسار آخر Admin/dir/update.php?t=123 قبل أن يقوم الخادم بتحديد الملف الذي سيقوم بتشغيله.

قم بإرفاق ملف htaccess لتفقده وتحديد ما تريد فعله بالضبط بشكل واضح.

اعتذر عن التأخر في الرد مهندس مصطفى  ، قد قمت  بأنشاء ملف .htaccess اخر بجانب ملف update وملف up_img وفي مجلد Admin سوف ارفقة لتوضيح الاشكال

htaccess (1)

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...