یه کد ساده mod_rewrite میخواستم که کار سایت multi language رو انجام بده.

NabiKAZ

Well-Known Member
سلام
من با mod_rewrite زیاد کار کردم ولی خیلی توش روون نیستم ، کد htaccess یی میخواستم که مثالهای زیر رو انجام بده .
کد:
/news/news.php
به
کد:
/news/news.php

کد:
/news/fa/news.php
به
کد:
/news/news.php?lang=fa

کد:
/news/fa/news.php?id=1
به
کد:
/news/news.php?id=1&lang=fa

ضمنا fa شاخه نیست و اصلا شاخه ای به این اسم وجود نداره، میشه گفت شاخه مجازیه ، البته باید کد طوری باشه که با اون به صورت شاخه برخورد نکنه و فقط به پارامتر تبدیل بشه. ترجیحاً کد طوری باشه که بجای fa اگر en و... هم باشه جواب بده.

پیشاپیش از راهنماییتون ممنونم
نبی
 
من به شما پيشنهاد ميکنم که اگر ميخوايد از mod_rewrite استفاده کنيد، نوع فايل‌هاي مجازي رو html بزاريد و ديگه از Query استفاده نکنيد، تا فايل کاملاً بصورت Static نشون داده بشه.

اين هم اون چيزي رو که خواستيد :

کد:
RewriteEngine On

RewriteRule ^news/fa/news.php ./news/news.php
RewriteRule ^news/(.*)/news.php ./news/news.php?lang=$1
RewriteRule ^news/(.*)/news.php?id=(.*) ./news/news.php?id=$2&lang=$1

مدديس.
 

NabiKAZ

Well-Known Member
سلام ،
خب! ضمن تشکر مجدد.
اشتباه من اين بود که برخلاف اکثر زبانهاي برنامه نويسي که براي برگشت به فولدر قبل از ".." استفاده ميکنند، اما در اينجا بايد از "." استفاده بشه.
کد شما کمي خاص بود. با يه تغيير کوچيک به صورت زير تقريباً اون چيزي که ميخواستم شد:
کد:
RewriteRule ^(.*)/(.*)/(.*) ./$1/$3?lang=$2
اما يک مشکلي که وجود داره اينه که اگر خود url ، متغيير به خودش گرفته باشه در اونصورت lang=$2? که اضافه ميشه مشکل پيش مياد، و بجاي اون بايد lang=$2& استفاده بشه. در این مورد منتظر راه حل شما هستم.

مورد ديگه اينکه من آدرس تصاوير رو به صورت images/pic.jpg/.. ميدم. حالا در صورتي که در url شاخه مجازي نوشته بشه بايد دوبار به عقب برگشت يعني اينجوري: images/pic.jpg/../.. و اينکه کجا از کدوم استفاده بشه کمي مشکله. براي همين به نظرم رسيد مسير ها رو به صورت مطلق بدم يعني به صورت images/pic.jpg/ اينطوري مشکل حل ميشه. اما يه مشکل کوچيک ديگه هست اونم اينکه در حالت local معمولا براي هر پروژه يک شاخه مجزا ايجاد شده و به ابتداي تمام مسير ها مجبوريم اسم اون شاخه رو اضافه کنيم، درصورتي که بر روي سرور چون فايلها در ريشه قرار دارند نيازي نيست چيزي بهش اضافه بشه. چه راهي وجود داره که دغدغه اجراي کدها به صورت local يا روي سرور رو نداشته باشيم و در هر دو بدون تغيير در کدها مشکلي نباشه. اين هم با mod_rewrite فکر ميکنم امکان پذير باشه.

تشکر
نبي
 
آخرین ویرایش:

NabiKAZ

Well-Known Member
اما يک مشکلي که وجود داره اينه که اگر خود url ، متغيير به خودش گرفته باشه در اونصورت lang=$2? که اضافه ميشه مشکل پيش مياد، و بجاي اون بايد lang=$2& استفاده بشه. در ا?ن مورد منتظر راه حل شما هستم.
اين مشکل توسط دوست خوبم آقاي "نيما جوهرزاده" حل شد بدين صورت:
PHP:
 RewriteRule ^(.*)/(fa|en)/(.*)$ ./$1/$3?lang=$2 [QSA]
وجود QSA باعث ميشه که کوئري به کوئري قبلي بچسبه.
اما اين مشکل همچنان باقيست:
مورد ديگه اينکه من آدرس تصاوير رو به صورت images/pic.jpg/.. ميدم. حالا در صورتي که در url شاخه مجازي نوشته بشه بايد دوبار به عقب برگشت يعني اينجوري: images/pic.jpg/../.. و اينکه کجا از کدوم استفاده بشه کمي مشکله. براي همين به نظرم رسيد مسير ها رو به صورت مطلق بدم يعني به صورت images/pic.jpg/ اينطوري مشکل حل ميشه. اما يه مشکل کوچيک ديگه هست اونم اينکه در حالت local معمولا براي هر پروژه يک شاخه مجزا ايجاد شده و به ابتداي تمام مسير ها مجبوريم اسم اون شاخه رو اضافه کنيم، درصورتي که بر روي سرور چون فايلها در ريشه قرار دارند نيازي نيست چيزي بهش اضافه بشه. چه راهي وجود داره که دغدغه اجراي کدها به صورت local يا روي سرور رو نداشته باشيم و در هر دو بدون تغيير در کدها مشکلي نباشه. اين هم با mod_rewrite فکر ميکنم امکان پذير باشه.


تشکر
 

جدیدترین ارسال ها

بالا