خدمات میزبانی وب ایده پردازان نظری

مرکز آموزش

دیتاسنتر های پرقدرت واقع در آمریکا و کانادا سالهاست میزبان وب سایت های بیشمار عزیزان هم وطن می باشند ما سعی نموده ایم با ارایه گارانتی نظر اعتماد کاربران را جلب نماییم.

LiveZilla Live Help

اعضا > مرکز آموزش > آموزش های مربوط به هاست ویندوز > Url rewriting در asp.net (تغییر یا حذف پسوند aspx در آدرس صفحات)


Url rewriting در asp.net (تغییر یا حذف پسوند aspx در آدرس صفحات)




Url rewriting در asp.net (تغییر یا حذف پسوند aspx در آدرس صفحات)

در این پست، من قصد دارم تا پیاده سازی تکنیک بازنویسی آدرس وب را در چند روش و با استفاده از چند مثال تشریح کنم. به فرض ما در حال ایجاد مجموعه ای از صفحات فروشگاه تجارت الکترونیکی در برنامه وب هستیم، و فرض می کنیم محصولات این فروشگاه طبقه بندی شده است (به عنوان مثال : کتاب، فیلم، سی دی، دی وی دی ، و غیره .
بیایید فرض کنیم که ما در ابتدا یک صفحه به نام "Products.aspx" داریم که نام یک محصول رو به عنوان ورودی querystring می گیره و اطلاعات صفحه رو بر اساس نام محصول یا شناسه فیلتر میکنه. آدرس مربوط به صفحه Products.aspx، مثل اینه :
http://www.store.com/products.aspx?category=books
http://www.store.com/products.aspx?category=DVDs
http://www.store.com/products.aspx?category=CDs
به جای استفاده از یک querystring برای نمایش هر دسته، ما می خواهیم تا تغییری در آدرس ایجاد کنیم طوری که به نظر برسد که هر دسته از محصولات یک آدرس منحصر به فرد دارد و این به موتور جستجو هم بسیار کمک میکند تا محصولات شما را به درستی معرفی کند .در ادامه این پست بیش از 4 روش مختلف را برای چنین تکنیکی بررسی می کنیم .
روش 1 : استفاده از پارامترها Request.PathInfo به جای QueryStrings
در روش اول من قصد دارم برای نشان دادن آدرس ،از روشی برای بازنویس استفاده کنم که یکی از ویژگی های نا شناخته شده در ASP.NET است . ویژگی Request.PathInfo. برای درک بهتر این روش آدرس فروشگاه اینترنتی به شکل زیر را در نظر بگیرید :
http://www.store.com/products.aspx/Books
http://www.store.com/products.aspx/DVDs
http://www.store.com/products.aspx/CDs
آدرسی به این سبک دیگر حالت Querystring ندارد و با قرار دادن کاراکتر / پس از Products.aspx موتور های جستجو آنرا به عنوان سه آدرس متفاوت می شناسند و نه به عنوان یک آدرس اینترنتی با سه مقدار ورودی مختلف .
حالا سوال اینه که چه طور باید این آدرسو تو برنامه تشخیص داد و محتوای مورد نظر بیننده رو بهش نشون داد.
شما به سادگی می توانید به کمک Request.PathInfo پارامترهای بعد از / را از ادامه آدرس بخوانید:
 
public string GetCategory() { if ((Request.PathInfo.Length == 0)) { return ""; } else { return Request.PathInfo.Substring(1); } }
این تابع مقدار book و dvds و cds را بازمی گرداند . اسکات گاتری در وبلاگ خود مثالی از این روش دارد که می توانید آنرا دانلود کنید .
روش 2 : استفاده از HttpModule برای انجام بازنویسی آدرسروش جایگزین برای روش Request.PathInfo استفاده از متد HttpContext.RewritePath است این روش اجازه می دهد تا یک برنامه نویس به صورت پویا مسیر پردازش آدرس های ورودی را بازنویسی کند تا ASP.NET اجرای درخواست را با استفاده از مسیر تازه ادامه دهد.
 
فرض کنید می خواهیم آدرس ها را به این شکل به کاربران نمایش دهیم .
http://www.store.com/products/Books.aspx
http://www.store.com/products/DVDs.aspx
http://www.store.com/products/CDs.aspx
این صفحات از نظر مراجعه کننده 3 صفحه جدا است ( و بسیار مناسب برای موتور جستجو ) اما در واقع همه این موارد به یک صفجه ارجاع داده می شود . در روش اول چون نام products.aspx در آدرس موجود بود ادامه آدرس به صفحه products.aspx ارجاع داده میشد اما چون در این روش آدرس ها به شکلی است که مفسر آدرس در سرور نمی تواند آنرا درک کند باید در جایی از برنامه مشخص کنیم که اگر آدرسی به فرم بالا دیدی آنرا به products.aspx ارجاع بده .

برای این کار می توانیم از رخداد Application_BeginReques در Global.asax استفاده کنیم . مثال :

void Application_BeginRequest(object sender, EventArgs e) {

string fullOrigionalpath = Request.Url.ToString();

if
(fullOrigionalpath.Contains("/Products/Books.aspx")) {
Context.RewritePath(
"/Products.aspx?Category=Books");
}
else if (fullOrigionalpath.Contains("/Products/DVDs.aspx")) {
Context.RewritePath(
"/Products.aspx?Category=DVDs");
}
}

البته نوشتن کدهایی شبیه به این روش بسیار  خسته کننده و مستعد خطا خواهد بود .پس پیشنهاد می کنم تا از روش های دیگه استفاده کنید که بهترین اونها استفاده از ماژول هایی هستند که به صورت رایگان واسه دانلود وجود دارن .

این ماژول ها را در web.config معرفی می کنید و مشخص می کنید که چه الگوی آدرسی را برای تبدیل مد نظر دارید به نمونه کد زیر توجه کنید که از UrlRewriter.net استفاده شده است و در فایل web.config قرار داده شده است. ( نیازی به کد نویسی نیست )
<?xml version="1.0"?>
<configuration>

<configSections>
<section name="rewriter"
requirePermission
="false"
type
="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
configSections>

<system.web>

<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
httpModules>

system.web>

<rewriter>
<rewrite url="~/products/books.aspx" to="~/products.aspx?category=books"/>
<
rewrite url="~/products/CDs.aspx" to="~/products.aspx?category=CDs"/>
<
rewrite url="~/products/DVDs.aspx" to="~/products.aspx?category=DVDs"/>
rewriter>
configuration>

اگر بخواهید از روش بالا برای تجزیه آدرسها استفاده کنید برای سایتهای سایز سازمانی بسیار خسته کننده کننده خواهد . نگران نباشید همیشه روشهای راحت تر هم هست .
شما می توانید با استفاده از قابلیت regular expression یک قاعده کلی برای پویش آدرسها بنویسید . به کد زیر توجه کنید . نمونه ای از regular expression است برای تجزیه پارامترهای ورودی به این صفحه :
<rewriter>
<rewrite url="~/products/(.+).aspx" to="~/products.aspx?category=$1"/ِ> ِ<ِ/ِrewriter>
 

با استفاده از این روش شما خیلی ساده تر و فوق العاده وب سایت خود را توسعه می دهید .
یک برنامه نمونه با استفاده از این تکنیک توسط اسکات گاتری طراحی شده که می تونه کمک خیلی خوبی برای درک بهتر این روش باشه .

باید متذکر شوم که در این روش نیازی به هیچگونه تغییری در تنظیمات سرور نیست . حال به شیوه بعدی می پردازیم .

روش 3 :
استفاده از HttpModule برای انجام بازنویسی آدرس در IIS7

روش هایی که تا کنون گفته شد برای آدرسهایی مناسب است که پسوند aspx. در آدرس وجود دارد اما برای اینکه آدرس هایی ساده تر و خلوت تر از آنچه تا کنون گفته شد داشته باشیم باید کمی بیشتر تلاش کنیم .
در این روش می خواهیم آدرسی به شکل زیر را برای صفحه های وب داشته باشیم .
http://www.store.com/products/Books
http://www.store.com/products/DVDs
http://www.store.com/products/CDs
این بهترین شکل آدرس برای یک محصول است به چند دلیل :
1- آسان به خاطر می ماند
2- موتور جستجو به آسانی دسته بندیش میکند
3- امنیت وب سایت را بالا می برد
پردازش آدرسهای فوق با استفاده از IIS5 و IIS6 آسان نیست و برای پردازش این شکل از آدرس ها باید ISAPI Extensions را در دات نت بازسازی کنید که این روش در بخش 4 تشریح خواهد شد. اما در IIS 7 مشکلی برای اینکار وجود ندارد و بدون هیچ تغییری در تنظیمات سرور می توانید وب سایت خود را با این روش آدرس دهی اجرا کنید .
به کد های زیر توجه کنید که تنظیمات مربوط به این شکل آدرس دهی را در web.config با استفاده از  URLRewriter نمایش می دهد .
<?xml version="1.0" encoding="UTF-8"?>

<configuration>

<configSections>
<section name="rewriter"
requirePermission="false"
type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
configSections>

<system.web>

<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
httpModules>

system.web>

<system.webServer>

<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule"/>
modules>

<validation validateIntegratedModeConfiguration="false"/>

system.webServer>

<rewriter>
<rewrite url="~/products/(.+)" to="~/products.aspx?category=$1"/>
rewriter>

configuration>
1) آن بر روی هر IIS 7.0 ماشین کار می کنند. شما یک مدیر لازم نیست که فعال کردن هر چه بر روی میزبان از راه دور. علاوه بر این در اعتماد متوسط ​​حالات میزبانی مشترک کار می کنند.

2) از آنجا که من پیکربندی UrlRewriter در هر دو حالت و
پیش فرض IIS7تنظیم کردم می توانم برنامه را در هم روی سرور IIS7 و هم روی سرور تعبیه شده در محیط Visual Studio به نام (aka Cassini) اجرا کنیم .
یک برنامه نمونه نیز برای این روش ارائه شده است که می توانید از اینجا دانلود کنید .
 
روش 4 : ISAPIRewrite به فعال کردن فرمت آدرس بدون پسوند برای IIS5 و IIS6
اگر نمی خواهید برنامه خود را روی سرور با IIS 7.0 اجرا کنید برای پیاده سازی این  روش در IIS5 و IIS6باید از فیلتر ISAPI برای بازنویسی آدرس ها استفاده شود .
برای استفاده از این روش بهترین ابزار موجود که رایگان هم هست Ionic's ISAPI Rewrite است .
برای بازنویسی آدرسها این ابزار یک ابزار تایید شده توسط بسیاری از شخصیت های برتر مایکروسافت است .
می توانید از وبلاگ اسکات هنسلمن هم تشریحی از این روش ببینید .


آیا این پاسخ به شما کمک کرد?

افزودن به مورد علاقه ها افزودن به مورد علاقه ها    پرینت این مقاله پرینت این مقاله

در همین زمینه
ارتقا فریم ورک (مشاهدات: 4154)
2- حل مشکل ارور 401 (مشاهدات: 7386)


Language:

تماس با ما

آدرس دفاتر تهران:

 دفتر شبکه و اتوماسیون اداری : خیابان کاشانی پلاک 27

دفتر  میزبانی وب : یادگار امام خیابان چراغی، پلاک 2 واحد 3