m_sh نشر 15 أبريل أرسل تقرير نشر 15 أبريل السلام عليكم الاخوة الكرام اواجة مشكلة في اختصار الروابط في ملف 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] ولا علم ماهي المشكلة ارجوا المساعدة في كتابة شيفرة صحيحة 2 اقتباس
1 محمد عاطف17 نشر 15 أبريل أرسل تقرير نشر 15 أبريل بتاريخ 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 محمد عاطف17 نشر 15 أبريل أرسل تقرير نشر 15 أبريل وعليكم السلام ورحمة الله وبركاته. السؤال غير واضح قليلا هل تحاول إختصار جميع روابط الموقع أم فقط أى رابط يبدأ ب 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 محمد عاطف17 نشر 15 أبريل أرسل تقرير نشر 15 أبريل بتاريخ الآن قال m_sh: نعم اريد تحويل جميع الروابط واخفاء querystring للحصول على مستوى افضل في الارشفة يمكنك تجربة الأكواد التي أرفقتها لك في الإجابة السابقة ويجب أن تعمل معك . إذا لم تعمل يرجى إخباري وإرسال الخطأ الذي يظهر لك. اقتباس
1 محمد عاطف17 نشر 15 أبريل أرسل تقرير نشر 15 أبريل بتاريخ 2 دقائق مضت قال m_sh: وبنسبة لكلمة website ماذا يقصد بها ؟ هل هو المجلد الخاص بالملفات لقسم محدد ؟ ام هو اسم الموقع ؟ لان سبق وكتبته بأسم الموقع ولم يفلح ويقوم بتحويلي الى صفحة خطا 500 كلمة website هي إذا كان المجلد فرعي أى هكذا : http://example.com/website/Details/123 إذا لم يكن لديك مجلد website إذا يجب حذفها . أما إذا كان لديك مجلد فرعي ولكن بإسم أخر يجب إستبدالها بإسم هذا المجلد . اقتباس
1 محمد عاطف17 نشر 15 أبريل أرسل تقرير نشر 15 أبريل بتاريخ 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 محمد عاطف17 نشر 15 أبريل أرسل تقرير نشر 15 أبريل بتاريخ 2 دقائق مضت قال m_sh: بارك الله فيك وجزاك خير الجزاء ولكن الموقع جميعا اصبح يعتمد على صفحة Details وهي صفحة فرعية فقط ولا اريد تطبيقها في الروابط وإياكم اللهم أمين . هل يمكنك توضيح ما معني يعتمد على صفحة Details ؟ لقد قمت بتجربة الموقع وهو يعمل دون أى مشكلة . ويتم الذهاب إلى الصفحات الأخرى ولا تحدث أخطاء. هل يمكنك توضيح ماذا تقصد اقتباس
1 محمد عاطف17 نشر 15 أبريل أرسل تقرير نشر 15 أبريل بتاريخ 4 دقائق مضت قال m_sh: صفحة Details هي لعرض تفاصيل الموضوع مثلا اقوم بأنشاء موضوع يحمل id=5 عن الضغط على الرابط tecani.com/Details? id=5 هذه هي صفحة الDetails ولكن الصفحة الرئيسية في الموقع هي index الصفحة الرئيسية تعمل دون أى مشكلة : https://www.tecani44.com/index وحتى صفحة حول الموقع و إتصل بنا جميعها تعمل دون أى مشاكل . فقط الصفحة الخاصة بال Details وهي تفاصيل الموضوع الذي وضعته لهذا الموقع لا يعتمد على Details بل هذا هو الصحيح لأن المواضيع يجب أن تظهر في رابط Details وليس index. اقتباس
1 محمد عاطف17 نشر 18 أبريل أرسل تقرير نشر 18 أبريل بتاريخ 8 دقائق مضت قال m_sh: الاخ المهندس محمد ارغب باختصار الروابط لكن في صفحة الـAdmin وقمت بأنشاء ملف .htaccess ولكن واجهتني مشكلة ان الصفحات لاتستجيب في هذا الملف فهل اذا قمت بستخدامها في ملف الموقع الرئيسي سوف تعمل ؟ بتاريخ On 15/4/2025 at 12:14 قال محمد عاطف17: نعم يرجى إستخدام ووضع الكود في ملف htaccess الرئيسي للموقع . والتأكد من وضع الكود في بداية الملف. اقتباس
1 Mustafa Suleiman نشر 18 أبريل أرسل تقرير نشر 18 أبريل بتاريخ منذ ساعة مضت قال 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 Mustafa Suleiman نشر 21 أبريل أرسل تقرير نشر 21 أبريل بتاريخ 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 m_sh نشر 15 أبريل الكاتب أرسل تقرير نشر 15 أبريل بتاريخ 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 m_sh نشر 15 أبريل الكاتب أرسل تقرير نشر 15 أبريل وبنسبة لكلمة website ماذا يقصد بها ؟ هل هو المجلد الخاص بالملفات لقسم محدد ؟ ام هو اسم الموقع ؟ لان سبق وكتبته بأسم الموقع ولم يفلح ويقوم بتحويلي الى صفحة خطا 500 اقتباس
0 m_sh نشر 15 أبريل الكاتب أرسل تقرير نشر 15 أبريل بتاريخ 5 دقائق مضت قال محمد عاطف17: كلمة website هي إذا كان المجلد فرعي أى هكذا : http://example.com/website/Details/123 إذا لم يكن لديك مجلد website إذا يجب حذفها . أما إذا كان لديك مجلد فرعي ولكن بإسم أخر يجب إستبدالها بإسم هذا المجلد . للاسف الشديد لم تفلح الطريقتين ولا اعلم ماهو السبب مباشرة عن تحويل رابط الصفحة من Details.php?t=123 وحذف ?t=123 يقوم بتحويلي الى صفحة الخطا 500 1 اقتباس
0 محمد عاطف17 نشر 15 أبريل أرسل تقرير نشر 15 أبريل بتاريخ 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 m_sh نشر 15 أبريل الكاتب أرسل تقرير نشر 15 أبريل بتاريخ 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 1 اقتباس
0 m_sh نشر 15 أبريل الكاتب أرسل تقرير نشر 15 أبريل بتاريخ منذ ساعة مضت قال محمد عاطف17: هل تستعمل كود أخر في ملف htaccess لتحويل الرابط : https://www.tecani44.com/Details?t=358 أو في ملف Nginx ؟ حيث يبدوا أنك بالفعل قمت بتحويل الرابط السابق إلى ملف Details.php مما يسبب تعارض . يرجى إرفاق ملف htaccess كاملا للنظر إليه. لا استخدم ملف Nginx مطلقا ارفقت لك الملف اخي الكرم محمد htaccess 1 اقتباس
0 m_sh نشر 15 أبريل الكاتب أرسل تقرير نشر 15 أبريل بارك الله فيك وجزاك خير الجزاء ولكن الموقع جميعا اصبح يعتمد على صفحة Details وهي صفحة فرعية فقط ولا اريد تطبيقها في الروابط 2 اقتباس
0 m_sh نشر 15 أبريل الكاتب أرسل تقرير نشر 15 أبريل بتاريخ 2 دقائق مضت قال محمد عاطف17: وإياكم اللهم أمين . هل يمكنك توضيح ما معني يعتمد على صفحة Details ؟ لقد قمت بتجربة الموقع وهو يعمل دون أى مشكلة . ويتم الذهاب إلى الصفحات الأخرى ولا تحدث أخطاء. هل يمكنك توضيح ماذا تقصد صفحة Details هي لعرض تفاصيل الموضوع مثلا اقوم بأنشاء موضوع يحمل id=5 عن الضغط على الرابط tecani.com/Details? id=5 هذه هي صفحة الDetails ولكن الصفحة الرئيسية في الموقع هي index 1 اقتباس
0 m_sh نشر 18 أبريل الكاتب أرسل تقرير نشر 18 أبريل الاخ المهندس محمد ارغب باختصار الروابط لكن في صفحة الـ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 ولا علاقة له بالتحويل . الاستاذ محمد ارجوا المساعدة 1 اقتباس
0 m_sh نشر 18 أبريل الكاتب أرسل تقرير نشر 18 أبريل بتاريخ 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] قد قمت بكتابته بهذا الشكل ولكن لست متأكد من الجملة الاولى هل هي صحيحه اخي محمد ؟ 1 اقتباس
0 m_sh نشر 18 أبريل الكاتب أرسل تقرير نشر 18 أبريل بتاريخ 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 Mustafa Suleiman نشر 19 أبريل أرسل تقرير نشر 19 أبريل بتاريخ 14 ساعة قال m_sh: ممتاز جدا ولكن مثلا المحرر لم يعد يعمل كذلك جميع الروابط لم تعد تعمل وتحول الى الخطا 500 ماهي المشكلة في ذلك ؟ هل الاستدعاء يتوقف عند استخدام اختصار الروابط ؟ يوجد مشكلة في تهيئة .htaccess أدى إلى الخطأ 500، وليس عملية إعادة الكتابة بحد ذاتها، فاختصار الروابط من خلال RewriteRule لا يؤدي إلى إيقاق الاستدعاء، ما يفعله عند وصول طلب بمسار معين /Admin/dir/update/123 إلى الخادم، تقوم قاعدة RewriteRule بإعادة كتابة المسار داخلياً إلى مسار آخر Admin/dir/update.php?t=123 قبل أن يقوم الخادم بتحديد الملف الذي سيقوم بتشغيله. قم بإرفاق ملف htaccess لتفقده وتحديد ما تريد فعله بالضبط بشكل واضح. اقتباس
0 m_sh نشر 20 أبريل الكاتب أرسل تقرير نشر 20 أبريل بتاريخ 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) اقتباس
السؤال
m_sh
السلام عليكم
الاخوة الكرام
اواجة مشكلة في اختصار الروابط في ملف htaccess حيث اني قمت بستخدام كل الطرق في الاختصار لكن لم تفلح
وهنا الطريقة الثانية
ولا علم ماهي المشكلة ارجوا المساعدة في كتابة شيفرة صحيحة
23 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.