Clean URL و Friendly URL و Search Engine Friendly URL همگی نامهای گوناگونی است که برای یک چیز گذاشتهاند. فرض کنید که شما به عنوان برنامهنویس در بخش مدیریت به مدیر سایت اجازه دادهاید تا صفحات مورد نظر خود را ایجاد کند. شما این صفحات را در بانک اطلاعاتی مینویسید. حالا کاربر با زدن نشانی زیر میتواند، محتوای این صفحه را ببیند:
جستجوگرها چندان این نشانی را نمیپسندند و اگر شما چنین سایتی را تولید کنید چندان بنای دوستی با شما را نمیگذارند. ولی اگر بتوانید کاری کنید که آدرس شما چیزی شبیه به این شود، داستان کمی فرق خواهد کرد:
البته روشن است که در سایت شما واقعا فایلی به اسم page-47.aspx وجود ندارد و این تنها یک آدرس مجازی یا یک Alias به آدرس واقعی است.
انجام این کار در Apache و PHP به سادگی آب خوردن است. کافی است افزونه Mod_Rewrite را در Apache فعال کنید (این افزونه در بیشتر میزبانهای امروزی فعال است) و در شاخه اصلی سایتتان فایلی به نام .htaccess درست کنید و در آن یک Rule یا قانون Rewrite بنویسید. چیزی شیبه به این کار را راه میاندازد:
RewriteEngine On
RewriteBase /
RewriteCond % !-f
RewriteCond % !-d
RewriteRule . /index.php [L]
در این Rule هر درخواستی که به این سایت انجام شد به فایل index.php فرستاده میشود. حالا در فایل index.php خیلی ساده میشود با $_SERVER["REQUEST_URI"] نشانی مجازی که کاربر وارد کرده است را پیدا کرد و محتوای مناسب با آن را به کاربر نشان داد. بر این اساس اگر کاربر نشانی site.com/products/1 را وارد کنید شما در فایل index.php میتوانید نشانی products/1 را پیدا کنید، و صفح محصول اول را به او نشان دهید. در حالی که واقعا هیچ شاخهای به اسم products و 1 وجود ندارد.
انجام این کار هیچ وقت در IIS و ASP به راحتی Apache نبوه است. برای این کار لازم است تا در فایل Global.asax خودتان یک رویداد BeginRequest بنویسید. این رویداد در آغاز رسیدن Request به Web Server فراخوانی میشود. حالا در این رویداد میتوانید با کمک HttpContext مسیر فعلی یا (incoming) را پیدا کرده و بر اساس نیاز خودتان با کمک متند RewritePath مسیر مجازی را به مسیر واقعی تبدیل کنید.
یک نمونه خیلی ساده این کار:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext incoming = HttpContext.Current;
string oldpath = incoming.Request.Path.ToLower();
string pageid; // page id requested
// Regular expressions to grab the page id from the pageX.aspx
Regex regex = new Regex(@"page(\d+).aspx", RegexOptions.IgnoreCase |
RegexOptions.IgnorePatternWhitespace);
MatchCollection matches = regex.Matches(oldpath);
if(matches.Count > 0)
{
// Extract the page id and send it to Process.aspx
pageid = matches[0].Groups[1].ToString();
incoming.RewritePath("Process.aspx?pageid=" + pageid);
}
else
// Display path if it doesn’t containt pageX.aspx
incoming.RewritePath(oldpath)
}
}
ما در اینجا همه مسیرها را به فایل Process.aspx فرستادهایم. حالا باید چنین فایلی را درست کنید و در آن به سادگی با کمک Request.QueryString["pageid"] میتوانید شماره صفحه مورد نظر کاربر را پیدا کنید.
کلیدواژه: URL Rewriting
آخرین دیدگاهها
3 روز 7 ساعت پیش
4 روز 8 ساعت پیش
4 روز 20 ساعت پیش
2 هفته 2 روز پیش
2 هفته 4 روز پیش
3 هفته 6 روز پیش
5 هفته 2 ساعت پیش
5 هفته 3 روز پیش
5 هفته 5 روز پیش
6 هفته 6 روز پیش