في حال كان عندك موقع متعدد اللغات وأريد توفير امكانية اعادة التوجيه لهذا الموقع الى نسخة تناسب لغة زوار الموقع او لغة البلد القادم منها، امامك خيارين اما تعرض نافدة منبثة وتنبه الزائر بوجود نسخة بلغته من الموقع، أو تقوم باعادة التوجيه التلقائي بناء على البلد الخاصة بالزائر ، ساضع كود برمجي لطريقة اعادة توجيه الزوار بحسب اللغة الخاصة بالمنطقة المناسبة لهم. مثلا لو كان الزائر قام من المغرب، أوالاردن إلخ… يتم توجيه للصفحة باللغة العربية، لو كان من دولة ثانية تتحدث باللغة الانجليزية سيتم توجيه الى النسخة الانجليزية وهكذا .
سبب الحاجة الى اعادة التوجيه
لو اردت تحديد الدولة بذقة استخدم اعادة التوجيه بناء على ال IP و الدولةفي لغة PHP استخدام قاعدة بيانات Maxmind GeoIP_V2
https://github.com/P3TERX/GeoLite.mmdb/releases/download/2023.02.13/GeoLite2-Country.mmdb
قم بتتبيث سكربت معرفة دولة الزورا من خلال هذا الامر (نفده على السيرفير المحلي او السيرفير الحقيقي لينك)
composer.phar require geoip2/geoip2:~2.0
في حال لم ترد استخدام كمبوزر قم بتحميل السركبت كامل من هنا
https://github.com/maxmind/GeoIP2-php/archive/refs/heads/main.zip
وهذا الكود يوضع في داخل القالب او سكربت PHP الدي تستخدمه:-
require_once( APPPATH . ‘third_party/GeoIp2/vendor/autoload.php’ );
user_ip=$_SERVER[‘REMOTE_ADDR’] ;// الحصول على IP الزائر .
$redr =[‘mo’=>’mo.my.com’, ‘ly’=>’ly.my.com’,’sa’=>’sa.my.com’, ]
spl_autoload_register( ‘func888’ );
function func888( $class ) {
include_once( str_replace( array(‘/’,’\\’), DIRECTORY_SEPARATOR, dirname(__file__).”/$class.php”) ) ;
}
use GeoIp2\Database\Reader;
//بدل الكلمة “country” بـ “city” حتى تتعامل مع المدن .
try{
$reader = new Reader( dirname(__file__).”/GeoLite2-Country.mmdb” ); // لازم الملف يكون بالمسار الصحيح
$record = $reader->country( $user_ip );
$reader->close();
$country_name=$record->raw[‘country’][‘names’][‘en’];// يرجع لنا اسم الدولة بصبغة ايزو 3166
}
catch ( GeoIp2\Exception\AddressNotFoundException $e ) // سالة في حالة الخطاء
{ $country_name = ‘not_found’; }
$newurl = $redr[ $country_name ] ; // نحصل على عنوان اعادة التوجيه الجديد
header(‘location:’.$newurl) ; // نعيد توجيه الزائر الى الموقع الجديد
ملاحظات
- التابث APPPATH يمثل مسار السكربت الكامل مثلا /var/www/myapp1 إلخ.
- اعادة التوجيه هنا مختصة بزوار الصفحة الرئيسية، ليس من الجيد اعادة توجيه الزوار من الصفحات الداخلية، لانهم في الغالب قادمين من مصدر خارجي وصاحب المصدر يعرف ماهي اللغة التي يتكلم بها الزائر.
في حال كنت مشترك في كلاودفلار (توجد طريقة من خلالها تستخدم معرفات Cloudflare لمعرفة دولة الزائر من PHP مباشرة:-
$country_code = $_SERVER[“HTTP_CF_IPCOUNTRY”];
وبالتالي توجييهم الى النسخة المطلوبة من الموقع، مثلا ar.example.com إلخ