Url Rewriting در Htaccess

image post

Url Rewriting در Htaccess

Url Rewriting به شما اجازه میدهد تا آدرس های وب سایت خود را کوتاه تر کنید و موارد اضافی را از آدرس پاک نمایید , همچنین در seo سایت شما تاثیر مثبت دارد.

امروزه همه  cms های بزرگ و فریم ورک ها از این متود برای ساخت آدرس های سایت استفاده می نمایند

برای این کار نیاز به تغییر تنظیمات وب سرور از طریق فایل htaccess داریم

کار url rewriting توسط ماژول rewrite در آپاچی انجام می شود برای فعال سازی این ماژول باید کد زیر را در htaccess قرار دهیم :

RewriteEngine On

حال برای تعیین محدوده ایجاد تغییرات از کد زیر استفاده می نماییم :

RewriteBase Dir_name

در کد بالا Dir_name نام دایرکتوری می باشد

جهت شرط گذاری آدرس ها از کد زیر استفاده می نماییم :

RewriteCond condition

در مرحله بعدی باید الگوی ویرایش  و تغییر آدرس های وارد شده را بنویسیم

RewriteRule regex_rule

بجای regex_rule باید قانون url rewriting را با regex بنویسید که آموزش regex در سایت موجود است .

برای مثال ما میخواهیم .php  را از آدرس های وب سایت پاک نماییم

RewriteEngine On

RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^\.]+)$ $1.php

در خط 

RewriteEngine On

مشخص کردیم ماژول rewrite فعال شود

در خط 

RewriteBase /

اجازه ویرایش را به فلدر root رو فرزندانش دادیم

در خط

RewriteCond %{REQUEST_FILENAME} !-f 

شرطی اجرا میشود تا ار آدرس مربوطه یک فلدر نیست rewrite روی آن انجام شود !

در خط

RewriteRule ^([^\.]+)$ $1.php

با استفاده از regex مشخص کردیم آدرس های دریافتی یک .php در انتهایشان اضافه شود

پس هنگامی که آدرس بصورت

www.ali-bakhshi.ir/index باشد فایل www.ali-bakhshi.ir/index.php اجرا میشود

در مرحله بعد میخواهیم پارامتر های get را به شکل زیبا تری در بیاوریم !

?page=2&id=5 به page/2/id/5

مثال :

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^page\/(\d+)\/id\/(\d+)$ index.php?page=$1&id=$2

در کد بالا در صورتی که id یا page یک دایرکتوری نباشند آن ها را به عنوان پارامتر به فایل index.php میفرستد !

اما این مورد پارامتر های ثابتی دارد اگر بخواهیم بی نهایت پارامتر را مثل فریم ورک ها استفاده نماییم راه حل بهتری وجود دارد

برای ایجاد پارامتر های داینامیک از کد زیر استفاده می نماییم

برای اینکار باید علاوه از htaccess زبان php را هم دخیل نماییم

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php

در کد بالا اگر پارامتر های آدرس فلدر نباشند آنها را به عنوان Request_Uri به فایل index.php میفرستد

حال کافی است در فایل php کد زیر را اجرا نمایید :

$uri = $_SERVER['REQUEST_URI'];

اگر مقدار داخل متغیر uri را echo کنیم متوجه می شویم آدرس وارد شده داخل آن است

حال کافی است با کد زیر پارامتر ها را در یک آرایه بریزیم و بر اساس / از هم جدا نماییم

$params = explode('/',$uri);

حال پارامتر های آرایه را با کد زیر به $_GET تغییر می دهیم :

$key=null;
$value=null;
foreach($params as $param)
{

$key = array_shift($params);

$value = array_shift($params);

if($key != null && $value != null)
{
       $_GET[$key] = $value;
}

}

به این ترتیب اگر آدرس زیر در مرورگر وارد شود

news/4/id/90/page/2/comment/active

نتیجه برابر با آدرس زیر است

news=4&id=90&page=2&comment=active


موفق باشید

دنیس ریچی : یونیکس بسیار ساده هست، تنها یک نابغه باید باشید تا بتوانید سادگی آن را درک کنید.