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

فرض کنید که یک سایت دارید و میخواهید کاربرانتون با آدرسی شبیه user1.example.com به سایت شما دسترسی داشته باشند. یعنی هر کاربر یک زیردامنه. به عنوان مثال صفحه مختص کاربر2 داری آدرس user2.example.com باشه. راه اول اینه که یک ویرچوال هاست (ٰVirtualHost) در فایل تنظیمات آپاچی برای کاربر درست کنید که هر زیردامنه را به صفحه اختصاصی آن ریداریکت کند. مشکل این راه حل احمقانه این است که شما نمیتوانید برای هر کاربر این کار را انجام دهید. اگر جزو کسانی هستید که اعتقاد دارید میتوانید بصورت دستی برای همه کاربرانتان این کار را انجام دهید از خواندن بقیه مقاله منصرف شوید.

راه حل بهتر: آپاچی را طوری تنظیم کنید که تمام زیردامنه های  به صورت *.example.com را قبول نماید و به اسکریپتی هدایت کند که بصورت داینامیک کاربر را به صفحه مناسب هدایت نماید. این اسکریپت را میتوانید به وسیله هر زبان اسکریپت نویسی مثلا پی اچ پی یا پایتون انجام دهید.

تنظیم دامنه

در این بخش میخواهیم دی ان اس سرور خودمون رو طوری تنظیم کنیم که بتونه از زیردامنه های ویلدکارد (wildcard) استفاده کنه. اگر این کار رو درست انجام بدیم تمام زیردامنه ها به آدرس آی پی که شما مشخص کردید هدایت میشند. ولی هنوز یه کار میمونه که باید انجام بدید و اون تنظیم وب سرور برای مدیریت زیر دامنه هاست.

میخوام وارد جزئیات بشم ولی بیاد داشته باشید که تنظیمات DNS بستگی به سروری که دارید ازش استفاده میکنید ممکنه متفاوت باشه. تو این مقاله بهتون نشون میدم که این کار تو دی ان اس سرور محبوب Bind چقدر راحته.

برای اینکه زیردامنه های ویلدکارد رو در Bind فعال کنید کافیه فقط یک خط رو به ناحیه (zone) دامین خودتون اضافه کنید.

...

; wildcard subdomains are all directed to this IP
; of course this should be the IP of your web server

*.example.com. IN A 1.2.3.4

...

اگه از DNS سرور دیگری استفاده میکنید به مستنداتش مراجعه کنید.

تنظیمات آپاچی

فرض من براینه که قبلا با آپاچی کار کردید و با تنظیمات آپاچی و بویژه نحوه ساختن ویروچوال هاست ها آشنایی دارید. پس برای اینکه سریعتر به اصل مطلب برسیم باید تنظیمات زیر رو به فایل http.conf اضافه کنید.

...

NameVirtualHost 1.2.3.4

<VirtualHost 1.2.3.4> DocumentRoot /www/exampleroot/ ServerName www.ecample.com ServerAlias *.example.com </VirtualHost> ...

اسکریپت PHP

خب کارمون تقریبا تموم شد. فقط حالا باید اسکریپتی بنویسیم که براساس نام زیردامنه محتوای مناسب رو به کاربر نشون بده. من در اینجا یه مثال خیلی ساده از PHP میارم که کلیت کار دستتون بیاد.

$subdomain = substr(
                 $_SERVER['SERVER_NAME'], 0,
                 strpos($_SERVER['SERVER_NAME'],'.')
             );

در واقع ما اینجا زیر دامنه را از آدرس استخراج کردیم. حال میتونیم با توجه به مقدار متغیر subdomain خروجی مناسب رو تحویل کاربر بدیم.

اگه جایی تو مطلب ابهام بود لطفا توکامنتها مطرح کنید.