واضح آرشیو وب فارسی:سایت ریسک: بازنویسی URL و دادن SubDomain اختصاصی به کاربران amir_3d_mad 28 شهريور 1386, 12:08سلام . میخوام بدونم با چه روشی میشه URL های سایت رو بازنویسی کرد ؟ یعنی به جای نوشتن یه چیز دیگه نوشت : مثلا به این صورت : یا به این صورت : یعنی با زدن این آدرس مرورگر همون page1.aspx رو لود کنه ولی amir رو به عنوان query بشناسه تا بشه ازش تو اون صفحه استفاده کرد ! aramdreamss 30 شهريور 1386, 17:04مشتری من یک وب سایت با تعدادی ساب دامین داشت که مثلا به شکل products.somedomain.com تعریف شده بودند.حالا مشتری می خواست اگر به عنوان مثال کاربر آدرس support.somedomain.com/helpdesk.aspx را درخواست کرد اطلاعات از somedomain.com/support/helpdesk.aspx برای او نمایش داده شود. یعنی کاربر همیشه آدرس را در مرورگر خود ببیند ( در حالی که اطلاعات در پوشه support قرار دارند ) . این روند تغییر آدرس از آن چه که درخواست شده است " بازنویسی آدرس" نام دارد. در این مقاله ما یکی از راه های حل این مشکل را بررسی خواهیم کرد. چه گزینه هایی برای بازنویسی URL در اختیار داریم؟ - ساده ترین و مناسب ترین راه استفاده از Application_BeginRequest و کلاس برای بازنویسی آدرس است. - استفاده از یک ماژول http در برنامه ASP.NET برای انجام این کار -استفاده از یک فیلتر ISAPI که درخواست ها را بررسی و عمل بازنویسی را انجام دهد. در این مقاله ما روش اول را آزمایش خواهیم کرد. علت استفاده از این روش برای انجام کار سادگی و سرعت تعریف آن می باشد. در موارد کلی تر و پیشرفته تر شما ممکن است دو روش دیگر را انتخاب کنید. رویداد Application_BeginRequest رویداد Application_BeginRequest اولین رویدادی است که در خط لوله ( Pipeline ) پردازش مربوط به HTTP اجرا می شود. این رویداد بهترین مکان برای قرار دادن کد بازنویسی آدرس است. کلاس کلاس شامل اطلاعات ویژه HTTP در مورد یک درخواست HTTP است.این کلاس همچنین به شما اجازه دسترسی به دیگر اشیا ASP.NET نظیر Request و Response را می دهد. این کلاس یک متد استاتیک به نام Current دارد که مراجع برنامه جاری را نگهداری می کند. متد RewritePath() در این کلاس کلید انجام عمل بازنویسی آدرس است. این متد به دو شکل در دات نت فریم ورک 1.1 تعریف شده است: کد: public void RewritePath(string); public void RewritePath(string, string, string); نقش اصلی متد RewritePath() به روز کردن مسیر شی Request و نیز مشخصه های Query String برای ماست.به عبارت دیگر استفاده از این متد این امکان را به ما می دهد تا از آدرس هایی استفاده کنیم که با مسیر داحلی صفحه تفاوت دارند. مثال - گام به گام - یک پروژه ASP.NET در سی شارپ بسازید. -فایل web.config را باز کنید و تگ های زیر را به آن بیفزایید: کد: <appSettings> <add key="productsSite" value="products"></add> <add key="servicesSite" value="services"></add> <add key="supportSite" value="support"></add> </appSettings> ما نام های فیزیکی پوشه هایی که صفحات واقعی در آنها قرار دارند را در بخش appSettings ذخیره می کنیم. ما این اطلاعات را بعدا در کدی که می نویسیم خواهیم خواند. - سه پوشه جدید در برنامه خود بسازید : Products وServices و Support -به هر یک از این پوشه ها یک وب فرم به نام MainPage.aspx اضافه کنید. -فایل Global.asax را باز کنید و هندلر زیر را پیدا کنید: protected void Application_BeginRequest (Object sender, EventArgs e) - کد زیر را به Application_BeginRequest اضافه کنید : کد: string host,originalurl,newurl; host=Request.Url.Host; originalurl=Request.Url.PathAndQuery; switch(host) { case "products.somedomain.com": newurl="~/" + ConfigurationSettings.AppSettings["productsSite"] + originalurl; break; case "services.somedomain.com": newurl="~/" + ConfigurationSettings.AppSettings["servicesSite"] + originalurl; break; case "support.somedomain.com": newurl="~/" + ConfigurationSettings.AppSettings["supportSite"] + originalurl; break; default: newurl="~/" + ConfigurationSettings.AppSettings["supportSite"] + originalurl; break; } (newurl); حالا بیایید کد را با هم بررسی کنیم: ما ابتدا ویژگی هوست مربوط به درخواست را به کمک Request.Url.Host دریافت می کنیم. در مورد این مثال ما آن را به صورت چیزی شبیه به support.somedomain.com یا somedomain.com دریافت می کنیم. ما همچنین مسیر و query string صفحه درخواست شده را به کمک Request.PathAndQuery بدست می آوریم. در سناریو ما این چیزی شبیه به /helpdesk.aspx خواهد بود. عبارت switch هوست را تست می کند و بر اساس هوست دریافت شده ما اطلاعات مربوط به محل فیزیکی صفحه را از فایل web.config می خوانیم. ما آدرس جدید را از ریشه به این پوشه فیزیکی تغییر می دهیم ( با کاراکتر ~ ) در نهایت متد RewritePath() را از کلاس فراخوانی می کنیم و آدرس جدید را به آن پاس می کنیم. در نتیجه زمانی که کاربر آدرسی نظیر support.somedomain.com را درخواست کند ما اطلاعات را از جایی مثل somedomain.com/support folder به کاربر خواهیم داد. ------------------------------------------------------------------------------------------ <system.web> <urlMappings enabled="true"> <add url="~/Widget.aspx" mappedUrl="~/Products/W/Widgets.aspx"/> </urlMappings> </system.web> ------------------------------------------- ببين كارت رو را ميندازه يا نه اگه نه بگو... amir_3d_mad 31 شهريور 1386, 04:18aramdreamss عزیز خیلی ممنون از توضاحات کاملتون . من حتما تست میکنم . اگه مشکلی داشتم ، باز مزاحمتون میشم . مرسی .
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 3135]