Url های کاربرپسند بدون استفاده از apache mod rewrite
لینک کوتاه پنجشنبه , 28 دی 1391 17 دیدگاه
قضیه سئو که الان باب صحبت هر محافلی شده در مواردی صحبت از آدرسهای کاربرپسند داره .
پیاده سازی آدرسهای مناسب و شبه استاتیک غالباً با استفاده از ماژول rewrite آپاچی قابل پیاده هست (apache_mod_rewrite) که دستوارت را در فایل htaccess. نوشته میشود .
حال اگر بنا به دلایلی نشود از این قابلیت استفاده کرد میشود باز هم با پی اچ پی آدرسهایی مناسب رو تولید کرد که تنها یک تفاوت دارند و آن هم داشتن عبارت index.php در میان آدرس تولیدی هست .
بطور مثال :
http://example.org/index.php/user/id/1
http://example.org/index.php/post/id/1
http://example.org/index.php/site/post/first-post
http://example.org/index.php/site/page/about
http://example.org/index.php/site/category/example/page/2
پیاده سازی این نوع آدرس دهی نیازمند رعایت چند اصول ساده است که براساس برنامه نویسی شی گرا قابل پیاده است .اکثر فریم ورکهای پی اچ پی که تحت معماری MVC پیاده شده اند ، چنین قابلیتی را ارئه میدهند حتی بیشتر (تنظیمات روتر بصورت دلخواه) .
در ادامه با من باشید تا چنین روشی رو با هم پیاده کنیم .
مطابق تصویر زیر ابتدا یک فایل index.php بسازید و کنار آن 4 پوشه controller , model , view , core در داخل پوشه core یک فایل init.php و در داخل پوشه controller دو فایل به اسم userController.php و siteController.php
شاید تا حالا حدس زده باشید که ساختار شبیه MVC هست :) دقیقا .
البته قصد این نیست که بیاییم MVC رو بررسی کنیم پس در این مثال علناً پوشه های model , view بی استفاده هستن و فقط با کنترلر کار داریم !
خب بیایید تحلیل یک آدرس رو شروع کنیم
example.org/index.php/user/id/1
اگر از index.php به بعد را با کاراکتر / از هم جدا کنیم سه جزء داریم ، جزء اول (user) کنترلر ما خواهد بود ، جزء دوم (id) اکشن ما خواهد بود و سایر اجزای بعد از آن پارامترهای ما هستند .
وظیفه ما این است که با درخواست چنین آدرسی فایل کنترلر را include کنیم که در این مثال میشود فایل userController.php و از کلاس موجود در آن ، متد id را صدا بزنیم و عدد 1 را بعنوان پارامتر به آن بدهیم !
خب یک مثال دیگر !
example.org/index.php/site/hi/reza
در اینجا فایل کنترلر میشود siteController.php ، اکشن/متد ما میشود hi و پارامتر ارسالی میشود کلمه reza که البته میتواند هر چیز دیگری باشد .
خب برویم سراغ کنترلر ها
برای آدرس example.org/index.php/site/index باید یک کنترلر بسازیم که یک متد index داشته باشه . پس در پوشه controller یک فایل میسازیم به اسم siteController.php و دستورات زیر رو مینویسیم .
class siteController { //url : example.ir/index.php/site/index public function index() { echo 'Hello world'; } }
خب بیایید یک متد دیگر اضافه کنیم بعنوان hi که یک پارامتر بگیرد ، کلاس کنترلر را بصورت زیر بنویسید
class siteController { //url : example.ir/index.php/site/index public function index() { echo 'Hello world'; } //url : example.ir/index.php/site/hi/reza public function hi($name = '') { echo "Hi {$name}"; } }
اما چرا اینگونه ؟؟
وقتی عبارتی در پایان فایل index.php قرار میگیرد ، با استفاده از PHP_SELF قابل دسترس هست ! این قابلیت قبلاً برای تست نفوذ xss قرار میگرفت که اکشن فرم را برابر
$_SERVER['PHP_SELF']
تمامی این تنظیمات در فایل init.php انجام میشود که بررسی آن را به عهده خودتان میگذارم .
دانلود فایلها
سلام رضا جان
لینک دانلود فایل هات خرابه اگر میشه لینک سالمشو قرار بده.
با تشکر