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

Mustafa Suleiman

الأعضاء
  • المساهمات

    20346
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    494

كل منشورات العضو Mustafa Suleiman

  1. عليك تفهم أمرًا هام وهو أن SQL هي لغة برمجة قواعد البيانات الأكثر شيوعًا في العالم، ووهي لغة قوية وفعالة لإنشاء واستعلام وتعديل قواعد البيانات، وفي تحليل البيانات، تستخدم SQL بشكل شائع لاستخراج البيانات من قواعد البيانات وتنظيفها وتحليلها. أما Python هي لغة برمجة عامة قوية وقابلة للتخصيص، وهي اللغة الأكثر استخدامًا لتحليل البيانات لأنها سهلة التعلم والاستخدام، ولديها مجموعة واسعة من المكتبات والأدوات المصممة خصيصًا لتحليل البيانات. وتستطيع استخدام Python لتحليل البيانات باستخدام مكتبات مثل Pandas وNumPy وMatplotlib للتلاعب بالبيانات ورسم الرسوم البيانية. وPython مفيدة عندما تحتاج إلى معالجة البيانات بشكل معقد أو تنفيذ تحليلات متقدمة أو تطبيق تقنيات التعلم الآلي والذكاء الاصطناعي. أي أن: SQL هي لغة تستخدم لإدارة واستعلام قواعد البيانات العلاقية. تستخدم SQL لاستخراج البيانات من قواعد البيانات وتحليلها باستخدام استعلامات مثل SELECT وGROUP BY وJOIN. SQL مناسبة بشكل خاص إذا كانت البيانات التي تريد تحليلها مخزنة في قاعدة بيانات علاقية. قد تحتاج إلى استخدام لغة برمجة أخرى مثل Python إذا كنت بحاجة إلى معالجة أو تحليل بيانات بشكل أوسع أو تنفيذ مهام أخرى إلى جانب استعلام قاعدة البيانات.
  2. أرجو إرفق صورة من الكونسول لديك ما هي الأخطاء التي تظهر لك في المتصفح؟
  3. من الأمور التي قد تساعدك بخصوص نقطة التلخيص، هو الإعتماد على Cheat sheet وهو أشبه بملخص للغة جافاسكريبت أو أي لغة ولكن بشكل إلكتروني، كالتالي: وكما ترى ستجد ملخص لغالب اللغة وستجد بالموقع لغات أخرى أيضًا مثل HTML, CSS ومكتبات مثل Bootstrap و React: http://cheatsheets.shecodes.io/javascript https://htmlcheatsheet.com/js/ عليك بالبحث في جوجل عن JavaScript Cheat Sheet وتستطيع فعل نفس الأمر مع أي لغة أو مكتبة.
  4. يكفي ذلك في البداية، حيث أن كورس CS50 هو كورس تأسيسي في البرمجه فهو يُعد مقدمة لعلوم الكمبيوتر ويعلم المبتدئين كيفية التفكير منطقيا وحل المشاكل بكفاءة، ويُغطي الكورس أساسيات البرمجة، بما في ذلك الخوارزميات، وبنى البيانات، وهندسة البرمجيات، والأمان. صحيح الكورس يجدد كل سنة، ويتم تحديث المحتويات والمواضيع التي يتم تناولها في الكورس كل عام لضمان مواكبة أحدث التطورات في مجال علوم الكمبيوتر. CS50: كورس CS50 هو الأصل لجميع الكورسات الأخرى. CS50x: هو نفس كورس CS50، ولكن بدون شهادة رسمية. CS50 AP: كورس مُقدم من جامعة هارفارد ويُقدم للطلاب في المدارس الثانوية وهو نسخة من كورس CS50x مُعدلة لتلبية متطلبات برنامج البكالوريا المتقدمة (AP) في علوم الكمبيوتر. ما الذي أنصحك به؟ في حال كنت تريد كورس باللغة العربية فأرشح لك كورس CS50 من قناة Abdelrahman Gamal وهو جيد جدًا. أما الكورسات الإنجليزية فيكفي أن تبحث على اليوتيوب عن CS50.
  5. سأحاول توضيح الأمر لك، حيث أن نظم المعلومات هي أنظمة تتكون من أشخاص وأجهزة وإجراءات وبيانات وبرامج تستخدم لجمع ومعالجة وتخزين وتوزيع المعلومات. الأشخاص: هم المستخدمون الذين يدخلون البيانات ويستخدمون المعلومات من النظام. الأجهزة: هي الأجهزة المادية التي يستخدمها النظام، مثل أجهزة الكمبيوتر والخوادم والأجهزة الطرفية. الإجراءات: هي الخطوات التي يتم تنفيذها لجمع ومعالجة وتخزين وتوزيع المعلومات. البيانات: هي الحقائق والأرقام والحروف التي يتم تخزينها في النظام. البرامج: هي البرامج التي تتحكم في كيفية عمل النظام. وقواعد البيانات هي مجموعة من البيانات المخزنة بطريقة يمكن الوصول إليها ومعالجتها بشكل فعال. البيانات: هي الحقائق والأرقام والحروف التي يتم تخزينها في قاعدة البيانات. الهيكل: هو الطريقة التي يتم بها تخزين البيانات في قاعدة البيانات. العلاقات: هي الروابط بين البيانات في قاعدة البيانات. أما نظام إدارة قواعد البيانات (DBMS) هو مجموعة من البرامج التي تسمح للمستخدمين بإنشاء وإدارة قواعد البيانات. الفرق بين نظم المعلومات وقواعد البيانات نظم المعلومات هي أنظمة شاملة تتضمن قواعد البيانات، لكن قواعد البيانات ليست سوى جزء من نظم المعلومات. مثال على نظم المعلومات نظام إدارة الموارد البشرية هو نظام معلومات يجمع ويعالج ويخزن ويوزع معلومات عن الموظفين، وتتضمن قواعد البيانات المستخدمة في هذا النظام معلومات مثل بيانات الموظفين وبيانات الأجور وبيانات الأداء. مثال على قواعد البيانات قاعدة بيانات المنتجات هي قاعدة بيانات تتضمن معلومات عن المنتجات التي يبيعها متجر، وتتضمن تلك المعلومات اسم المنتج والوصف والسعر والكمية المتوفرة.
  6. رسالة التحذير تشير إلى أن بعض القطع (chunks) في مشروع nuxtjs الخاص بك أكبر من 500 كيلوبايت بعد التقليلK ,يمكن أن يكون هذا له تأثير على أداء التطبيق، حيث يمكن أن يستغرق تحميل القطع الكبيرة وقتًا أطول. بعض الحلول الممكنة للمشكلة هي كالتالي: استخدام dynamic import() لفك الحزم (code-split) التطبيق من أجل تحميل القطع الكبيرة فقط عند الحاجة إليها، مما قد يؤدي إلى تحسين الأداء. استخدام build.rollupOptions.output.manualChunks لتحسين فك الحزم مما سيسمح لك بتحديد القطع التي تريد فك حزمها يدويًا، مما قد يساعد في تقليل حجم القطع الكبيرة. ضبط حد حجم القطع (chunk size limit) لهذا التحذير عبر build.chunkSizeWarningLimit لإخفاء التحذير إذا كان حجم القطع أكبر من الحد المحدد. هل المشكلة تؤثر على التطبيق؟ الأمر يعتمد على حجم التطبيق ونوع المحتوى الذي يتم تحميله، فإن كان التطبيق صغيرًا أو إذا كان المحتوى الذي يتم تحميله صغيرًا، فقد لا يكون للمشكلة أي تأثير ملحوظ، ولكن إن كان التطبيق كبيرًا أو إذا كان المحتوى الذي يتم تحميله كبيرًا، فقد تؤدي المشكلة إلى إبطاء الأداء بشكل ملحوظ.
  7. الأمر يعتمد على نوعية المشروع، فمثلاً لو كان المشروع برمجي مثل موقع ويب، فيتم رفع الموقع على استضافة من أجل توفير نسخة حية للمعاينة وأيضًا رفع المشرو على GitHub ووضع وصف له والتقنيات المستخدمة ووضع الرابط الخاص بالنسخة الحية live من المشروع، وشرح طريقة تشغيل المشروع إن وجدت. وعلى موقع مستقل، يكفي وضع صورة كاملة للموقع بشكل جميع من خلال إلتقاط صورة للشاشة من خلال أدوات مثل: https://screely.com/editor Take Webpage Screenshots Entirely - FireShot ثم وضع رابط النسخة الـ Live من المشروع من أجل معاينته أو رابط المشروع على GitHub، وذكر التقنيات المستخدمة في وصف المشروع على مستقل. كالمثال التالي: أما إذا كان المشروع UI\UX فيتم وضع صور أيضًا بشكل جمالي ووضع وصف للمشروع يوضح ما قمت به والبرامج المستخدمة وتوفير رابط على Behance أو Dribble مثلاً. وأنتِ مطورة ويب وليس مصممة UI/UX على الرغم من أنك قادرة على التصميم لكن لست متخصصة بالطبع في ذلك المجال.
  8. أرجو طرح السؤال أسفل فيديو الدورة في التعليقات وسيتم مساعدتك، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة.
  9. عليك حذف ملف welcome.conf في المسار التالي: /etc/httpd/conf.d ويمكنك تنفيذ الأمر التالي إذا كان لديك وصول لمنفذ الأوامر: sudo rm -f /etc/httpd/conf.d/welcome.conf أو تستطيع تعليق الأكواد في الملف لتصبح مثل التالي: # This configuration file enables the default "Welcome" # page if there is no default index page present for # the root URL. To disable the Welcome page, comment # out all the lines below. # #<LocationMatch "^/+$"> # Options -Indexes # ErrorDocument 403 /error/noindex.html #</LocationMatch> الآن عليك إعادة تشغيل سيرفر أباتشي من خلال الأمر التالي: service httpd reload
  10. استخدم هوك useCallback() لإنشاء نسخة من دالة getToday() التي يمكن استخدامها خارج نطاق هوك useCallback(). الكود سيكون كالتالي: import { useEffect, useState, useCallback } from 'react'; import { Col, Row } from 'react-bootstrap'; import moment from 'moment'; function Test() { const [today, setToday] = useState({}); const getToday = useCallback(() => { const t = moment(); return { time: t.format('hh:mm:ss a'), date: t.format('D/MMM/YYYY'), }; }, []); useEffect(() => { console.log(getToday); setToday(getToday); }, [getToday]); return ( <Row> <Col className='colTop'>{today?.date}</Col> <Col className='colTop' style={{ fontSize: '1.6rem', textAlign: 'center' }}> <h2>{today?.time}</h2> </Col> </Row> ); } export default Test;
  11. صحيح، يمكنك تجاهل الجزء الخاص بالواجهة الأمامية في حال قررت التخصص في الواجهة الخلفية فقط، أي تنفيذ الجزء الخاص بالواجهة الخلفية من كل مشروع واستخدام الكود الخاص بالواجهة الأمامية من مستودع المشروع في حال أردت إنشاء مشروع Full-Stack. حيث أن مطور الواجهة الخلفية، مهمته هي تطوير الخادم وإنشاء الواجهات البرمجية API والتعامل مع قاعدة البيانات ومعالجة البيانات الواردة من الواجهة الأمامية، وسيتم شرح ذلك في الدورة. أي تخصص الـ "باك إند" في تطوير الويب يعني أنك ستركز على تطوير الجزء الخادم (Server-Side) من التطبيقات والمواقع، مما يعني أنك لن تتعامل بشكل مباشر مع الجزء العميل (Client-Side) الذي يتعامل مع التفاعل مع المستخدم في المتصفح. ومن المفترض أن يتواجد مطور واجهة أمامية في الفريق معه لإنشاء المشروع سويًا. لكن أنت حاليًا بمفردك، لذلك تستطيع الإكتفاء بالواجهة الخلفية فقط وإختبار الخادم من خلال أداة مثل Postman أو من خلال واجهة مستخدم بسيطة واستخدام مكتبات مثل Bootstrap أو Chakra UI.
  12. السبب هو أن الدالة useEffect() يتم تنفيذها كل مرة يتم فيها تحديث حالة المكون today، وحيث أن الدالة useEffect() تحدد حالة المكون today ، فإن ذلك يؤدي إلى حلقة لا نهاية لها من التحديثات. عليك القيام بالتالي: إضافة حالة المكون today إلى مصفوفة الاعتماديات dependencies الخاصة بالدالة useEffect() من أجل منع تنفيذ الدالة useEffect() كلما تم تحديث حالة المكون today. استخدام هوك useCallback() لإنشاء نسخة من دالة getToday() التي يمكن استخدامها خارج نطاق هوك useCallback(). import { useEffect, useState, useCallback } from 'react'; import { Col, Row } from 'react-bootstrap'; import moment from 'moment'; function Test() { const [today, setToday] = useState({}); const getToday = useCallback(() => { const t = moment(); return { time: t.format('hh:mm:ss a'), date: t.format('D/MMM/YYYY'), }; }, []); useEffect(() => { setToday(getToday); }, [getToday]); return ( <Row> <Col className='colTop'>{today?.date}</Col> <Col className='colTop' style={{ fontSize: '1.6rem', textAlign: 'center' }}> <h2>{today?.time}</h2> </Col> </Row> ); } export default Test;
  13. مكتبة Laravel pennant هي مكتبة جيدة لإنشاء أنظمة الموافقة والمراجعة، وهي مناسبة لتطبيقك حيث يوجد مستخدمين يقومون بإضافة محتوى جديد، ثم يقوم مستخدم آخر بالموافقة عليه قبل نشره على الموقع. وأولاً تحتاج إلى تثبيت المكتبة عن طريق الأمر التالي: composer require laravel/pennant ثم نشر الإعدادات وملفات التهجير عن طريق الأمر التالي: php artisan vendor:publish --provider="Laravel\Pennant\PennantServiceProvider" ثم عليك تنفيذ الأمر: php artisan migrate ولإنشاء علامة بنانت جديدة، استخدم دالة create() في نموذج Pennant، وكمثال لإنشاء علامة بنانت للموافقة على محتوى جديد، استخدم الكود التالي: use App\Models\Content; use App\Models\User; use Laravel\Pennant\Models\Pennant; class ContentForm extends Form { public function buildForm() { $this ->add('title', TextType::class) ->add('body', TextareaType::class) ->add('author', UserType::class) ->add('submit', SubmitType::class); } public function handleSubmit() { $content = Content::create($this->getData()); $pennant = Pennant::create([ 'content_id' => $content->id, 'status' => 'pending', ]); return redirect()->route('contents.index'); } } يتم إنشاء علامة بنانت جديدة مع حالة "معلقة" وتحتوي العلامة البنانت على معرف المحتوى الذي سيتم الموافقة عليه. لمراجعة العلامة البنانت، استخدم دالة review() في نموذج Pennant، ومثلاً لمراجعة علامة بنانت للموافقة على محتوى جديد، سيكون الكود كالتالي: use App\Models\Content; use App\Models\User; use Laravel\Pennant\Models\Pennant; class ContentController extends Controller { public function approve(Pennant $pennant) { $pennant->review(); $content = Content::find($pennant->content_id); $content->publish(); return redirect()->route('contents.index'); } } وستجد هنا شرح وافي في المستند الرسمي: https://laravel.com/docs/10.x/pennant
  14. في حال أنك لم تقم بتسليم الملفات المصدرية وتمضينها ضمن داخل محادثة المشروع، أي قمت بتسليم العميل الملفات خارج الموقع على واتساب مثلاً، عليك برفع الملفات داخل محادثة المشروع، وأيضًا تضمين أية محادثات خارجية من خلال عمل Screenshots وتضمينها داخل المحادثة من خلال إضافة مثل FireShot على المتصفح ثم تصوير كامل المحادثة capture entire page من خلال نسخة المتصفح لواتساب مثلاً. ستجد هنا شرح مفصل:
  15. أرجو التعليق أسفل فيديو الدورة في التعليقات من أجل مساعدتك بشكل أفضل، وطرح الأسئلة العامة التي لا تتعلق بدروس الدورة هنا في قسم أسئلة البرمجة. وبخصوص سؤالك، يتم شرح منفذ الأوامر في البداية لكونه من الأساسيات، وبعد ذلك سيتم التطرق إلى Pycharm لا تقلق.
  16. هل يمكنك تجربة الكود مرة أخرى؟ وما هو الكود الذي تستخدمه؟
  17. يمكنك معرفة ما إذا تم تحميل التطبيق بالفعل من متجر Google Play من خلال إضافة معلمة إضافية إلى الرابط مثل معرف المستخدم أو أي معرف آخر فريد. مثل التالي: https://play.google.com/store/apps/details?id=com.example.myapp&user_id=1234567890
  18. سيتم ترجمة محتوى الحقل "content" أيضًا. والطريقة تتمثل في استخدام نموذج "ModelTranslation" لترجمة النماذج في Django. وفي المثال، يتم ترجمة اسم الحقل "content" فقط ولكن باستطاعتك ترجمة محتوى الحقل أيضًا عن طريق إضافة ترجمة لقيمة الحقل كالتالي: # models.py class MyModel(models.Model): name = models.CharField(max_length=255) content = models.TextField() class Meta: translations = { 'content': { 'en': 'content in English', 'ar': 'محتوى باللغة العربية', }, } والنتيجة هي ترجمة محتوى الحقل "content" إلى "content in English" باللغة الإنجليزية و "محتوى باللغة العربية" باللغة العربية. ولإضافة حقول جديدة إلى نموذجك، ما عليك سوى إضافة حقول جديدة إلى نموذجك وإضافة ترجمات لها إلى الملف "models.py". وهناك طرق أخرى لترجمة المعلومات القادمة من قاعدة البيانات في Django، ولكن تلك الطريقة هي طريقة بسيطة وفعالة.
  19. مشكلة تحذير maximum update depth exceeded تحدث عندما يستدعي المكون setstate أكثر من 100 مرة في دورة حياة واحدة، وذلك عندما يكون المكون مرتبطًا بحدث أو مكون آخر يطلق تغييرات بشكل متكرر. وأنت تحصل على التحذير لأنك تستدعي setstate في كل مرة يتم فيها استدعاء useEffect، وذلك لأنك تربط useEffect بـ moment() و timings، حيث يتم تحديث moment() بشكل متكرر، مما يؤدي إلى استدعاء useEffect بشكل متكرر. وكحل بسيط استخدم useCallback لإنشاء دالة ثابتة من moment() و timings، من أجل تقليل عدد المرات التي يتم فيها استدعاء useEffect. import { useEffect, useState, useCallback } from 'react'; import { Col, Row } from 'react-bootstrap'; import moment from 'moment'; function Test() { const [today, setToday] = useState({}); const memoizedMoment = useCallback(() => moment(), []); // const memoizedTimings = useCallback(() => timings, []); useEffect(() => { const t = memoizedMoment(); setToday({ time: t.format('hh:mm:ss a'), date: t.format('D/MMM/YYYY'), }); }, [memoizedMoment]); return ( <Row> <Col>{today.date}</Col> <Col>{today.time}</Col> </Row> ); } export default Test;
  20. 1- توزيع الحصص في حالة جلب أحد الشركاء المشروع البرمجي: 50% إلى الشريك الذي جلب المشروع البرمجي، وذلك لمساهمته في جذب العميل وتأمين المشروع. 25% إلى كل شريك من الشركاء الآخرين، وذلك لمساهمتهم في إدارة الشركة وتطويرها. وبالطبع يمكن تعديل النسبة حسب مساهمة كل شريك في المشروع، وإن كان الشريك الذي جلب المشروع البرمجي قد ساهم أيضًا في تطويره أو تسويقه، فيمكن زيادة حصته إلى 60% أو 70%. 2- توزيع الحصص في حالة عدم امتلاك أحد الشركاء الخبرة بالعمل البرمجي 50% إلى كل شريك من الشركاء الآخرين، وذلك لمساهمتهم في العمل البرمجي والتطوير. 25% إلى الشريك الذي لا يمتلك الخبرة البرمجية، وذلك لمساهمته في إدارة الشركة وتسويقها. وهناك مساحة لتعديل النسبة حسب مساهمة كل شريك في الشركة، فلو كان الشريك الذي لا يمتلك الخبرة البرمجية قد ساهم أيضًا في إدارة الشركة أو تسويقها، فيمكن زيادة حصته إلى 30% أو 35%. وهناك نقاط هامة وهي: الأخذ بعين الاعتبار مساهمة كل شريك في الشركة، سواء كانت مساهمة مالية أو فنية أو إدارية. ضرورة الاتفاق بين الشركاء على توزيع الحصص بشكل واضح وعادل. مراجعة توزيع الحصص بشكل دوري، وذلك حسب تطور الشركة ومساهمة كل شريك فيها.
  21. أرجو إضافة الكود من خلال علامة <> عند كتابة السؤال من أجل مساعدتك بشكل أفضل. وكمثال على ما تريديه تستطيعي استخدام flexbox كالتالي: كود HTML مع CSS <!DOCTYPE html> <html> <head> <style> .container { display: flex; align-items: center; /* لمحاذاة العناصر عمودياً */ } .container img { width: 100px; /* تعديل حجم الصورة حسب الحاجة */ height: auto; /* للحفاظ على تناسب الصورة */ margin-right: 10px; /* تعديل المسافة بين الصورة والنص */ } </style> </head> <body> <div class="container"> <img src="https://placehold.co/600x400" alt="صورة"> <p>نص هنا</p> </div> </body> </html> https://academy.hsoub.com/programming/css/أمثلة-نموذجية-لاستخدام-flexbox-في-css3-r471/
  22. من خلال الرابط من خلال إضافة معرف فريد إلى الرابط لكل مستخدم سواء كان معرف المستخدم أو أي معرف آخر فريد. أي إنشاء رابط دعوة على النحو التالي: https://example.com/download?user_id=1234567890 هنا نستخدم الرابط معرف المستخدم 1234567890، عندما يقوم المستخدم بالنقر فوق الرابط، سيتم تتبع معرف المستخدم الخاص به في سجل التطبيق. أو بالشكل التالي: http://example.com/download?invite_code=123456 وباستطاعتك استخدام متغيرات PHP لإنشاء رابط دعوة ديناميكي على النحو التالي: $user_id = 1234567890; $link = "https://example.com/download?user_id=$user_id"; وإليك مثال على كيفية تتبع من قام بتحميل التطبيق من خلال الرابط باستخدام PHP: // حدد معرف المستخدم $user_id = $_GET['user_id']; // تحقق مما إذا كان المستخدم موجودًا $user = User::find($user_id); if (!$user) { // المستخدم غير موجود return; } // سجل تحميل التطبيق $app_download = new AppDownload(); $app_download->user_id = $user_id; $app_download->save(); ثم تنفيذ تعقب للمستخدمين الذين قاموا بتنزيل التطبيق من خلال الرابط عن طريق استعلام قاعدة البيانات للمعرفات التي تم تخزينها والتي تمثل المستخدمين الذين استخدموا الرابط، ثن تنفيذ المكافآت أو الإجراءات المناسبة للمستخدمين الذين قاموا بتنزيل التطبيق من خلال الرابط كمنحهم نقاط مكافأة أو دعوتهم للانضمام إلى مجموعة خاصة.
  23. أرجو منك طرح أي أسئلة متعلقة بالدورات أسفل فيديو الدورة. رسالة الخطأ TemplateDoesNotExist تعني أن Django لا يمكنه العثور على ملف القالب templets.html، للأسباب التالية: ملف القالب غير موجود. ملف القالب ليس في دليل تم تكوين Django للبحث عن القوالب فيه. ملف القالب له الاسم الخطأ. وتحتاج إلى التأكد من وجود ملف القالب وأنه في دليل تم تكوين Django للبحث عن القوالب فيه، وتستطيع التحقق من إعداد TEMPLATES في ملف settings.py الخاص بك لمعرفة أي الأدلة تم تكوين Django للبحث عن القوالب فيها. فتحقق للتأكد من وجود ملف القالب templets.html. إذا وجدت ملف القالب، فتأكد من أنه في دليل تم تكوين Django للبحث عن القوالب فيه. إذا كان ملف القالب في الدليل الصحيح، فتحقق للتأكد من أنه يحمل الاسم الصحيح. أيضًا تأكد من أن مجلد القوالب لديك بالاسم الصحيح وهو templates
  24. افتح ملف .htaccess ثم أضف الكود التالي: RewriteEngine on RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(GB|US|IN)$ RewriteRule (wp-login|xmlrpc).php$ - [F,L] وعندما يقوم زائر من الدولة المستهدفة بمحاولة الوصول إلى موقعك، سيتم رفض الوصول وستظهر لهم صفحة خطأ 403 Forbidden دون إعادة توجيههم إلى صفحة معينة.
  25. استخدم ملف .htaccess لإرسال إعادة توجيه 301 إلى صفحة فارغة من أجل إعادة توجيه الزوار إلى صفحة فارغة دون عرض صفحة الخطأ التي تم إنشاؤها بواسطة كود المنع. أضف السطر التالي إلى الملف: RewriteEngine On RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US$ RewriteRule ^(.*)$ /404.html [L] والكود السابق يفترض أنك ترغب في منع زوار من الولايات المتحدة من دخول موقعك، ورمز البلد للولايات المتحدة في قاعدة بيانات GeoIP هو "US". لذلك، يمكنك استخدام هذا الرمز كـ "كود_الدولة_المستهدفة" في القاعدة. هذا يعني أنه إذا كانت دولة الزائر تابعة للولايات المتحدة (رمز الدولة "US")، سيتم إعادة التوجيه إلى صفحة 404.html بدلاً من عرض الصفحة الرئيسية لموقعك. والكود التالي لمنع أكثر من دولة: RewriteEngine On RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US$ [OR] RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^GB$ RewriteRule ^(.*)$ /404.html [L] لدينا شرطين (RewriteCond)، أحد الشروط يتحقق إذا كان رمز الدولة هو "US" (ولاية متحدة) والآخر يتحقق إذا كان رمز الدولة هو "GB" (المملكة المتحدة)، وإذا تطابق أي من هذين الشرطين (باستخدام [OR])، سيتم إعادة التوجيه إلى صفحة 404.html.
×
×
  • أضف...