واضح آرشیو وب فارسی:سایت ریسک: مقاله : ساخت بی نهایت Subdomain از طریق برنامه نویسی shahab_ksh2 10 بهمن 1387, 22:59ایجاد subdomain از طریق برنامه نویسی یکی از جذاب ترین مسائل برنامه نویسی تحت وب است سایتهای زیادی مانند blogfa یا persianblog از این سیستم استفاده می کنند بدین شکل که برای مثال کاربران سایت شما بتوانند آدرس مخصوص به خود را داشته باشند برای مثال شما وب سایتی به نام ******** دارید و دوست دارید که کاربران ساییتون هر کدوم بتونن آدرس اختصاصی داشته باشند ******** .com () ******** .com () یکی از راههایی که وجود داره ایجاد هر زیر دامنه در کنترل پنلتونه اما این کار بصرفه نیست و شما رو خسته می کنه چون که ممکنه در روز هزاران نفر وارد سایت شما بشن و درخواست ایجاد آدرس کنن بجز مورد بالا مشکلات دیگه هم وجود داره مثل - غیر قابل کنترل بودن از طریق برنامه نویسی - به ازاء هر آدرس زیر دامنه باید یک دایرکتوری اختصاص داده بشه - منبع سرور به شدت مورد استفاده قرار می گیره - سازماندهی و کنترل دشوار میشه - برای تعویض سرور به مشکلات زیادی بر میخورید - استفاده ازWildcard هم هزینه های جانبی رو به همراه داره و همه سرورها انجام نمی دن - کار برنامه نویس برای امنیت و یکپارچگی بسیار مشکل میشه - ... برای حل این مشکلات برخی از سرورها خود امکاناتی رو به وجود آورده که براحتی برنامه نویس بتونه بی نهایت دامنه رو از طریق برنامه نویسی به وجود بیاره و حتی کاربران بتونن به راحتی از امکانات این سیستم استفاده کنن از مزایای استفاده از این سرویس میتوان به - قابل کنترل و دسترس بودن از طریق برنامه نویسی - منبع سرور به هیچ وجه درگیر نمیشن و سرعت برنامه شما کاهش پیدا نمی کنه - سازماندهی و کنترل به ساده ترین شکل ممکن امکان پذیره - بی نیاز بودن به سرور اختصاصی و هزینه های سنگین آن - بی نیاز بودن به Wildcard - ... حال از نظر برنامه نویسی کافی کد زیر رو در روت دایرکتوری سایت ************.ir () بنویسید Request.Url.ToString(); در مثال ما اگه آدرس ******** .ir () رو در آدرس بار وارد کنیم مقدار ******** .ir () رو بر میگردونه با استفاده از روشهای برنامه نویسی میشه Subdomain یعنی همون parsa رو آدرس جدا کرد و این چیزی که یک برنامه نویس به اون احتیاج داره برنامه نویس می تونه تمام آدرس های رو از طریق برنامه بدست بیاره در asp.net برنامه نویس می تونه با استفاده از URLRewrite تمام Subdomain ها رو به یه دایرکتوری یا یک صفحه دینامیک ارجاع بده شاید سوال شما این باشه چطور میشه URL ها رو کنترل کرد مثل blogfa یا persianblog این برای یک برنامه نویس کار راحتی فرض کنید می خواهید یک سایت مثل blogfa بزنید که کاربران بتونن از اون طریق ثبت نام کنن و آدرس مخصوص خودشون رو داشته باشن کار راحتی کافی یه بخش ثبت نام توی سایتتون داشته باشید که ID یا همون URL ها رو توی یه دیتابیس ذخیره کنه در این حالت شما میتونید هر آدرس رو فقط یک بار برای یک نفر ثبت کنید مثلا کسی ID به نام parsa رو می خاد ثبت کنه شما ID به نام parsa رو در بانک اطلاعاتی تون ذخیره میکنید و ترتیبی می دید که اگه کسی دوباره خواست اون آدرس رو ثبت کنه نتونه خوب تا حالا فقط کار ثبت ID و منحصر به فرد کردن اون رو انجام دادیم با روش بالا هم روش دست یابی به subdomain رو گفتم بقیه بخش ها مثل مدیریت برای هر کاربر و ... هم که کار راحتی یعنی کلید یا متغییر صفحات شما میشه همون Subdomain ها که منحضر فرد هستند حال کنترل Subdomain ها کل Subdomian های ورودی از سه حالت بیشتر نیست یا قبلا ثبت شده که مراحل بالا رو توضیح دادم یا Subdomian قبلا ثبت نشده یعنی Subdomain رو از url گرفتید توی بانک اطلاعاتی رو گشتید ولی نبوده در این حالت می تونید صفحه رو طراحی کنید که به کاربر بگه این چنین صفحه ای وجود نداره ! یا یه کار بهتر می تونید پیشنهاد ثبت نام این Subdomain رو بدید و حالا حالت سوم فرض کنید کسی www رو وارد کرد یعنی این که مثلا نوشت ******** .ir () در این حالت که www به عنوان یک زیر دامنه شد ! ولی شما می تونید به راحتی کاربر رو به آدرس ******** .ir () یعنی بدون www ریدایرکت کنید برای حذف یک کاربر هم کافی که شما ID که میشه همان subdomain مربوطه رو از بانک اطلاعاتی حذف کنید یا بلوک کنید ! توجه : در صورتی که این کد رو در سرورهای غیر از ******** .ir () آزمایش کردید پیام خطای Internet Explorer cannot display the webpage رو دریافت خواهید کرد در صورتی که در سرورهای ایران سایت نام subdomain برای شما بر گشت داده می شود. موفق باشید. ******** .com () MDP 12 بهمن 1387, 09:43دوست عزیز این آموزش شما هیچ بار علمی نداره و تبلیغ محسوب میشه. ایجاد ساب دومین روش های دیگه ای داره که از جای بحث اینجا نیست. / افرادی که این تاپیک رو می خونن توجه داشته باشند که این روش به هیچ وجه عملی نیست. / :tavajoh: : این قبیل تبلیغات جریمه در بر خواهد داشت. MDP 14 بهمن 1387, 11:09شما فقط تا فردا مهلت دارید اثبات کنید. من فردا آموزش این کار رو برای هر سروری قرار می دم. تاکید میکنم تا 15 بهمن! modir.shop 14 بهمن 1387, 13:41سلام میشه یک نگاه هم به فروم زیر بندازید ممنونم MDP 14 بهمن 1387, 15:111 . من با کسی دعوا ندارم فقط از این نوع تبلیغ بدم میاد. 2 . شما هنوز چیزی رو ثابت نکردید.اگه فکر می کنید ثابت کردید من به شما FTP می دم و روی هاست من پیادش کنید. 3 . اگه عجله دارید می تونید این مقاله رو ببینید : Create Unlimited Subdomains with HTTP Modules - Brendan Tompkins [MVP] () MDP 14 بهمن 1387, 16:37این مقاله فقط از کد استفاده کرده نه از چیز دیگه ای. به زودی ترجمش می کنم. دوستان لطفا اس پم نکنند. m1pfard 17 بهمن 1387, 08:31تنظیم DNS:شما توانایی انجام این کار را زمانی که سرورتان از Wildcard پشتیبانی کند خواهید داشت؛ به طور کلی تنها کافی است تمام درخواستهای ارائه شده به *.domain.com به domain.com بفرستید. درصورتی که سرورتان این خاصیت را پشتیبانی نمیکند، می توانید DNS ها را به صورت دستی بر روی آن تنظیم کنید. تنظیم IIS: نفهدیم چی به چیه؟!!!! ایجاد ماژول پس از آن شما نیاز به قطع درخواستها و ارسال آن به URL مورد نظرتون دارین. یه راه مناسب ایجاد I و اضافه کردن ان به برنامه هست. فقط کافیست در رویداد OnBeginRequest درخواست را خوانده و با استفاده از تابع Server.transfer آن را به آدرس مورد نظر ارجاع داد. یه تاثیر مثبت این روش این است که مرورگر (browser) آدرس جدید را نمایش نمی دهد (برخلاف Response.redirect) . کد مورد استفاده من به این ترتیب است، البته علاوه بر مطالب فوق من از برخی مقایسه ها برای مطمئن شدن از آدرس استفاده کرده ام. چون نمی خواهم برای صفحات دیگر (به غیر از Default.aspx) این اتفاق بیفتد: public class SubdomainModule : I { public void Init( app) { // register for pipeline events app.BeginRequest += new EventHandler(this.OnBeginRequest); } public void Dispose() {} public void OnBeginRequest(object o, EventArgs args) { // get access to app and context app = ()o; ctx = app.Context; if (!(app.Context.Request.Url.Host.StartsWith("codebetter") || app.Context.Request.Url.Host.StartsWith("www"))) { if (ctx.Request.Path.ToUpper() == "/DEFAULT.ASPX") { string[] domainParts = app.Context.Request.Url.Host.Split(".".ToCharArray()); if (domainParts.Length > 2) ctx.Server.Transfer("/explore/explore.aspx?q=" + domainParts[0]); } } } } ثبت ماژول: برای این کار کافی است این کد را به web.config اضافه کنیم. والسلام <> <add name="SubdomainModule" type="Tompkins.Cs.Subdomains.SubdomainModule, Tompkins.Cs.SubdomainHandler" /> </> خوب دیگه بسه کم بخندین!!!! :mad: انگلیسم همینقدر اومد! :D MDP 17 بهمن 1387, 08:36عالیه مهدی جان.دستت درد نکنه.انقدر کار دارم که وقت ترجمه نداشتم.:rose: موضوع کار اینه که به هسته ASP.Net این ماژولی که نوشته شده میگه که وقتی درخواست اومد چکش کنه و بعد بازیابی کنه. این کار به هیچ نرم افزار جدایی هم احتیاج نداره. روی هر سروری که ASP.Net داشته باشه کار میکنه.
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 643]