amin_lili
کاربر تازه وارد
سلام
چند وقتی بود که دوستان در مورد حذف پسوند صفحات از نوار آدرس سوال داشتند و همچنین خود من نیز در مورد این موضوع اطلاعات اشتباه از یک منبع ( حالا دیگه کاملا نا مطمئن) دریافت کرده بودم که به اشتباه تصور می کردم امکان حذف پسوند فقط توسط هاست سنتر ها انجام میشه . اما چند وقت پیش با اشاره یکی از دوستان به ذهنم رسید در این مورد تحقیق کنم . نتیجه کار این شد که تصمیم گرفتم اونچه رو آموختم در قالب یک مقاله مختصر به شما دوستان عزیزم ارائه بدم .
و اما ...
برای این کار راههای مختلفی در اینترنت وجود داره و که من به یکی از راحت ترین و بهترینشون می پردازم .
ابتدا باید در مورد یکی از متدهای موجود در دات نت که این امکان رو به ما میده صحبت کنم . متد HttpContext.RewritePath() به ما این اجازه رو می ده که به طور داینامیک آدرسی خاص که توسط مرورگر درخواست میشه رو به مسیری جدید redirect کنیم . به عنوان مثال هر گاه آدرس http://www.mysite.com/mypage.html درخواست شد ، به آدرس http://www.mysite.com/mypage.aspx هدایت بشیم .
خب ، با دونستن این مطلب مساله رو به این شکل فرض می کنیم که : ما یک وب سایت داریم به نام www.HideExtensions.com که این سایت حاوی یک دایرکتوری به نام Dir1 می باشد و درون این دایرکتوری دو صفحه موجود است به نام های Page1.aspx و Page2.aspx . در root سایت هم صفحه Default.aspx رو داریم که حاوی دو Button هست که هر یک ما رو هدایت می کنه به یکی از دو صفحه فوق .
حالا می خوایم زمانی که به صفحه Page1.aspx میریم در نوار آدرس این تغییر بوجود بیاد :
چند وقتی بود که دوستان در مورد حذف پسوند صفحات از نوار آدرس سوال داشتند و همچنین خود من نیز در مورد این موضوع اطلاعات اشتباه از یک منبع ( حالا دیگه کاملا نا مطمئن) دریافت کرده بودم که به اشتباه تصور می کردم امکان حذف پسوند فقط توسط هاست سنتر ها انجام میشه . اما چند وقت پیش با اشاره یکی از دوستان به ذهنم رسید در این مورد تحقیق کنم . نتیجه کار این شد که تصمیم گرفتم اونچه رو آموختم در قالب یک مقاله مختصر به شما دوستان عزیزم ارائه بدم .
و اما ...
برای این کار راههای مختلفی در اینترنت وجود داره و که من به یکی از راحت ترین و بهترینشون می پردازم .
ابتدا باید در مورد یکی از متدهای موجود در دات نت که این امکان رو به ما میده صحبت کنم . متد HttpContext.RewritePath() به ما این اجازه رو می ده که به طور داینامیک آدرسی خاص که توسط مرورگر درخواست میشه رو به مسیری جدید redirect کنیم . به عنوان مثال هر گاه آدرس http://www.mysite.com/mypage.html درخواست شد ، به آدرس http://www.mysite.com/mypage.aspx هدایت بشیم .
خب ، با دونستن این مطلب مساله رو به این شکل فرض می کنیم که : ما یک وب سایت داریم به نام www.HideExtensions.com که این سایت حاوی یک دایرکتوری به نام Dir1 می باشد و درون این دایرکتوری دو صفحه موجود است به نام های Page1.aspx و Page2.aspx . در root سایت هم صفحه Default.aspx رو داریم که حاوی دو Button هست که هر یک ما رو هدایت می کنه به یکی از دو صفحه فوق .
حالا می خوایم زمانی که به صفحه Page1.aspx میریم در نوار آدرس این تغییر بوجود بیاد :
راه حل : به سایتمون فایل global.asax را اضافه می کنیم . ( کلیک راست بر روی وب سایت ، انتخاب گزینه Add New Item… و انتخاب گزینه Global Application Class ) . سپس درون این فایل متد زیر را اضافه می کنیم :
کد:
[LEFT]
void Application_BeginRequest(object sender, EventArgs e)
{
string fullOrigionalpath = Request.Url.ToString();
if (fullOrigionalpath.Contains("~/Dir1/(.+)/"))
{
Context.RewritePath("~/Dir1/$1.aspx");
}
}
[/LEFT]
این متد زمانی فراخوانی میشه که یک درخواست برای مشاهده یک آدرس به سرور ارسال میشه . آدرس درخواست شده درون متغیر fullOrigionalpath ذخیره میشه و بررسی می کنیم چنانچه این آدرس متعلق به یکی از صفحات درون دایرکتوری Dir1 باشه و شکل آدرس درخواستی مثلا به شکل ~/Dir1/Page1/ باشه اون رو به آدرس واقعیش هدایت کنه . عبارت (.+) به معنای "هرچیزی" هست ، یعنی هر چیزی بعد از /Dir1/ بیاد به جای عبارت $1 در دستور Context.RewritePath("~/Dir1/$1.aspx"); قرار بگیره . مثلا اگر ما آدرس ~/Dir1/Page1/ رو درخواست کنیم به آدرس ~/Dir1/Page1.aspx میریم .
حالا لازمه مجوزهایی رو درون web.config ایجاد کنیم که به ما اجازه پردازش آدرسهای فوق رو بده . برای این کار یک dll بسیار مفید و کارساز وجود داره که لازمه دانلود کنیم . پس از دانلود این dll که نامش هست Intelligencia.UrlRewriter.dll اون رو به دایرکتوری bin وب سایتمون اضافه می کنیم (add reference) .
حالا به web.config رفته و در زیر تگ <configuration> عبارت زیر رو قرار میدیم.
حالا لازمه مجوزهایی رو درون web.config ایجاد کنیم که به ما اجازه پردازش آدرسهای فوق رو بده . برای این کار یک dll بسیار مفید و کارساز وجود داره که لازمه دانلود کنیم . پس از دانلود این dll که نامش هست Intelligencia.UrlRewriter.dll اون رو به دایرکتوری bin وب سایتمون اضافه می کنیم (add reference) .
حالا به web.config رفته و در زیر تگ <configuration> عبارت زیر رو قرار میدیم.
کد:
[LEFT]
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>
[/LEFT]
و پس از تگ <system.web> ، عبارت زیر را :
کد:
[LEFT]
<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>
[/LEFT]
و بالاخره بعد از تگ بسته </system.web> عبارت زیر را وارد می کنیم :
کد:
[LEFT]
<rewriter>
<rewrite url="~/Dir1/(.+)/" to="~/Dir1/$1.aspx" />
</rewriter>
[/LEFT]
حالا کافیه در صفحه Default.aspx دو عدد Button بگذارید و در رویداد هر یک کدهای زیر رو وارد کنید :
کد:
[LEFT]
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("~/Dir1/Page1/");
}
protected void Button2_Click(object sender, EventArgs e)
{
Response.Redirect("~/Dir1/Page2/");
}
[/LEFT]
همین!
من سورس مثال بالا را در قالب یک فایل زیپ به همین مطلب پیوست کردم که شامل dll مورد نظر هم هست .
امیدوارم توضیحات کامل باشه . هر جا سوالی بود در خدمتم!