تغییر documentroot زیر دامنه دایرکت ادمین

وسط راه‌اندازی یک پروژه‌ی جدید هستید که قرار است روی یک زیردامنه (Subdomain) میزبانی شود. همه چیز را طبق روال همیشگی پیش می‌برید: زیردامنه را در دایرکت ادمین می‌سازید، فایل‌هایتان را آپلود می‌کنید و انتظار دارید با وارد کردن آدرس زیردامنه، وب‌سایت جدید بالا بیاید. اما ناگهان متوجه می‌شوید که چیزی درست نیست! وب‌سرور همچنان دارد محتویات پوشه‌ی پیش‌فرض را نمایش می‌دهد، نه پوشه‌ای که شما فایل‌هایتان را آنجا قرار داده‌اید. اینجاست که مسیر پیش‌فرض (DocumentRoot) زیردامنه، مثل یک زیردامنه‌ی پیش فرض، برخلاف خواسته‌ی شما عمل می‌کند.

به طور پیش‌فرض، وقتی در DirectAdmin یک ساب‌دامین ایجاد می‌کنید، مسیری شبیه به این به آن اختصاص می‌یابد:

/home/USERNAME/domains/DOMAIN.com/public_html/Subdomain

(به‌جای USERNAME نام کاربری هاست و به‌جای DOMAIN.com دامنه‌ی اصلی شما قرار می‌گیرد و Subdomain هم نام زیر‌دامنه‌ی شماست.) این ساختار پیش‌فرض برای بیشتر کاربران کافی است، اما برای شما که یک کاربر حرفه‌ای هستید، کافی بودن هرگز کافی نیست! شاید می‌خواهید ساختار پوشه‌های وب‌سایتتان را به دلخواه خودتان تنظیم کنید. مثلا فرض کنید می‌خواهید زیردامنه‌ی شما به جای پوشه‌ی پیش‌فرض، از یک پوشه‌ی کاملا مجزا سرو شود؛ پوشه‌ای که مثلا در مسیر دیگری از هاست قرار دارد یا شاید جزئی از یک ساختار پیچیده‌تر (مثلا بخشی از یک پروژه‌ی لاراول با ساختار خاص خودش) باشد. در این مواقع، باید آستین‌ها را بالا بزنید و DocumentRoot زیردامنه را تغییر دهید.

خبر خوب این است که DirectAdmin این امکان را در اختیار کاربران قرار می‌دهد – البته نه به صورت خیلی دم‌دستی و پیش پا افتاده، بلکه به شکلی که مناسب کاربران حرفه‌ای و مدیران سرور است. در ادامه، گام‌به‌گام و با زبانی خودمانی و روشن توضیح می‌دهیم که چطور می‌توانید مسیر DocumentRoot یک زیردامنه را در DirectAdmin تغییر دهید و زیردامنه‌ی سرکش خود را رام کنید. این آموزش طوری طراحی شده که انگار یکی از همکاران باتجربه‌تان کنار دستتان نشسته و مرحله‌به‌مرحله راهنمایی‌تان می‌کند. پس بدون فوت وقت، بیایید شروع کنیم.

پیش‌نیازها و آماده‌سازی قبل از تغییر DocumentRoot

پیش‌نیازها و آماده‌سازی قبل از تغییر DocumentRoot

قبل از ورود به مراحل عملی، اجازه دهید مطمئن شویم همه چیز برای یک تغییر موفقیت‌آمیز مهیاست. تغییر DocumentRoot یک زیردامنه کار پیچیده‌ای نیست، اما نیاز به دسترسی‌ها و مقدماتی دارد که اگر از قبل فراهم شده باشند، در وقت شما صرفه‌جویی خواهد شد و جلوی خطاهای احتمالی را می‌گیرد.

۱. دسترسی به DirectAdmin

بدیهی است که باید به کنترل‌پنل DirectAdmin هاست خود دسترسی داشته باشید. با نام کاربری و کلمه عبور وارد پنل شوید. (توجه داشته باشید که برخی تغییرات فقط توسط کاربر ادمین یا ریشه قابل انجام است. اگر شما مدیر سرور نیستید و روی هاست اشتراکی کار می‌کنید، ممکن است به همه‌ی امکانات دسترسی نداشته باشید که در بخش‌های بعدی توضیح خواهیم داد.)

۲. وجود زیردامنه‌ی موردنظر

زیردامنه‌ای که قصد تغییر DocumentRoot آن را دارید باید از قبل ایجاد شده باشد. DirectAdmin تنها برای زیردامنه‌های موجود امکان شخصی‌سازی ارائه می‌دهد. اگر هنوز زیردامنه را نساخته‌اید، ابتدا از بخش “Subdomain Management” یک زیردامنه بسازید و چند دقیقه صبر کنید تا تنظیمات DNS و وب‌سرور آن تکمیل شود.

۳. دانستن مسیر جدید و آماده‌کردن آن

تصمیم بگیرید که DocumentRoot جدید چه مسیری باشد. این مسیر در واقع پوشه‌ای است که می‌خواهید فایل‌های وب‌سایت زیردامنه از آن سرو شوند. برای مثال ممکن است بخواهید به‌جای مسیر پیش‌فرض …/public_html/Subdomain، محتوا از پوشه‌ی دیگری مثل /home/USERNAME/domains/Subdomain.DOMAIN.com/public_html بارگذاری شود؛ یا مثلا در یک سناریوی دیگر، بخواهید زیردامنه به پوشه‌ی public در یک پروژه‌ی Laravel که در مسیر دیگری قرار دارد اشاره کند. هر مسیری که مدنظر دارید، باید روی هاست شما وجود داشته باشد. اگر پوشه‌ی مقصد هنوز ساخته نشده، از File Manager DirectAdmin یا از طریق FTP/SFTP آن را بسازید. می‌توانید جهت اطمینان یک فایل تست (مثلا یک فایل index.html ساده) داخل آن قرار دهید که بعدا متوجه شوید تغییرات درست کار کرده است یا خیر.

۴. پشتیبان‌گیری (اختیاری ولی توصیه‌شده)

اگر دسترسی مدیر سرور یا کاربر ریشه (Root) دارید، بد نیست قبل از اعمال تغییرات، از تنظیمات فعلی وب‌سرور خود یک نسخه پشتیبان (Backup) تهیه کنید. در DirectAdmin می‌توانید از کل حساب کاربری یا حداقل از تنظیمات Apache بکاپ بگیرید. این کار به شما اطمینان می‌دهد اگر چیزی طبق انتظار پیش نرفت، راه برگشت دارید. حتی اگر دسترسی روت ندارید، حداقل تنظیمات فعلی DocumentRoot را در جایی یادداشت کنید تا بدانید حالت اولیه چه بوده است.

با آماده‌سازی موارد بالا، نوبت به اصل ماجرا می‌رسد. حالا دیگر شمشیر را از رو بسته‌اید تا DocumentRoot را به میل خودتان تنظیم کنید. مراحل زیر را با دقت دنبال کنید.

مراحل تغییر DocumentRoot زیردامنه در DirectAdmin

 

مراحل تغییر DocumentRoot زیردامنه در DirectAdmin

حالا به بخش عملی کار می‌رسیم. فرض می‌کنیم شما تمام پیش‌نیازها را آماده کرده‌اید و وارد DirectAdmin شده‌اید. روند کلی کار این است که از طریق قابلیت Custom HTTPD Configurations در DirectAdmin، تنظیمات وب‌سرور (Apache یا وب‌سرور مورد استفاده) را برای زیردامنه‌ موردنظر ویرایش کنیم. این قابلیت به ما امکان می‌دهد بدون ویرایش دستی فایل‌های کانفیگ (که در هاست‌های کنترل پنل‌دار معمولاً توصیه نمی‌شود)، تغییرات دلخواه را به پیکربندی وب‌سرور اضافه کنیم.

برای ملموس‌تر شدن موضوع، سناریوی زیر را در ذهن داشته باشید: دامنه‌ی اصلی شما example.com است و زیردامنه‌ی شما test.example.com. به صورت پیش‌فرض، DocumentRoot زیردامنه‌ی test این است: /home/USER/domains/example.com/public_html/test. اما مثلاً شما می‌خواهید محتوا را از مسیر دیگری بارگذاری کنید؛ مثلاً از پوشه‌ی مجزای /home/USER/domains/test.example.com/public_html. در ادامه، گام‌ها را طی می‌کنیم تا این تغییر انجام شود.

گام اول: ورود به DirectAdmin و رفتن به بخش تنظیمات HTTPD سفارشی

وارد حساب کاربری خود در DirectAdmin شوید. پس از ورود، در صفحه‌ی اصلی پنل (داشبورد) به دنبال بخشی بگردید که مربوط به تنظیمات پیشرفته‌ی وب‌سرور باشد. بسته به نسخه‌ی DirectAdmin و قالب (Skin) مورد استفاده، نام دقیق این بخش ممکن است کمی متفاوت باشد. در قالب‌های جدید (مانند قالب Evolution)، این گزینه معمولاً در منوی Account Manager یا Advanced Features با عنوان Custom HTTPD Configurations قابل مشاهده است. در نسخه‌های فارسی ممکن است با عنوانی مثل «تنظیمات HTTPD سفارشی» یا «پیکربندی سفارشی وب‌سرور» دیده شود.

روی Custom HTTPD Configurations کلیک کنید. با این کار، صفحه‌ای باز می‌شود که تمامی دامنه‌ها و زیردامنه‌های موجود در حساب کاربری شما را فهرست کرده است. DirectAdmin این امکان را می‌دهد که برای هر دامنه یا زیردامنه، تنظیمات اختصاصی وب‌سرور داشته باشید؛ و ما قرار است از همین قابلیت برای تغییر DocumentRoot استفاده کنیم.

گام دوم: انتخاب دامنه/زیردامنه موردنظر برای تغییر DocumentRoot

در صفحه‌ی تنظیمات HTTPD سفارشی، لیستی از دامنه‌های اصلی و زیردامنه‌های شما وجود دارد. ابتدا دامنه‌ی اصلی مرتبط با زیردامنه‌ی هدف را انتخاب کنید. به عنوان مثال، اگر می‌خواهید DocumentRoot زیردامنه‌ی test.example.com را عوض کنید، باید دامنه‌ی example.com را از لیست انتخاب نمایید (زیرا زیردامنه‌ی موردنظر زیرمجموعه‌ی این دامنه است).

پس از انتخاب دامنه‌ی اصلی، ممکن است صفحه‌ای ببینید که گزینه‌های مربوط به آن دامنه و زیرمجموعه‌هایش را نمایش می‌دهد. در برخی نسخه‌های DirectAdmin، شاید به جای انتخاب دامنه و سپس زیردامنه، مستقیماً بتوانید از همان لیست اولیه، خود زیردامنه را انتخاب کنید. اگر زیردامنه‌ها در لیست دیده می‌شوند، مستقیماً روی نام زیردامنه‌ی هدف کلیک کنید. در غیر این صورت، ابتدا دامنه‌ی اصلی را انتخاب کرده و سپس معمولاً در بخش تنظیمات سفارشی، یک منوی کشویی یا لیست برای انتخاب زیردامنه‌ی آن دامنه وجود دارد. زیردامنه‌ی موردنظر (test در مثال ما) را انتخاب کنید تا بخش ویرایش تنظیمات آن ظاهر شود.

نکته‌ی مهم: اگر فقط یک دامنه در حساب شما وجود دارد، کارتان ساده است – همان یکی را انتخاب کنید. اما اگر چندین دامنه میزبانی می‌کنید، حتماً دقت کنید دامنه‌ی درستی را انتخاب کرده‌اید. اشتباه انتخاب کردن دامنه ممکن است شما را به ویرایش تنظیمات دامنه‌ی اشتباه بکشاند که می‌تواند برای سایت دیگری مشکل‌ساز شود. پس با حوصله و دقت پیش بروید.

گام سوم: ویرایش تنظیمات و تعیین مسیر DocumentRoot جدید

حالا به بخش جذاب ماجرا رسیده‌ایم: ویرایش تنظیمات وب‌سرور برای زیردامنه. صفحه‌ای که مشاهده می‌کنید حاوی یک ویرایشگر متنی یا چند کادر متن است که محتوای پیکربندی سفارشی وب‌سرور را نشان می‌دهد. اگر تاکنون هیچ تنظیمات سفارشی‌ای وارد نکرده باشید، احتمالاً این کادرها خالی هستند یا حاوی راهنمایی مختصر می‌باشند. در غیراینصورت، ممکن است قبلاً تنظیماتی در این بخش وارد شده باشد (مثلاً برای موارد دیگری مثل تغییر نسخه‌ی PHP یک مسیر خاص یا تنظیمات خاص دیگری).

در اینجا هدف ما این است که DocumentRoot زیردامنه‌ی موردنظر را به مسیر دلخواه تغییر دهیم. برای این کار باید از دستورها و ساختار مخصوص DirectAdmin برای override کردن DocumentRoot استفاده کنیم. DirectAdmin برای این منظور از قالب‌ها (Templates) و متغیرهای داخلی استفاده می‌کند. خوشبختانه نیازی نیست از صفر چنین دستورهایی را بسازید؛ می‌توانیم از یک الگوی آماده بهره ببریم.

سناریوی نمونه: فرض کنیم می‌خواهید DocumentRoot زیردامنه‌ی test را به مسیر /home/USER/domains/test.example.com/public_html تغییر دهید (به‌جای مسیر پیش‌فرض /home/USER/domains/example.com/public_html/test). همچنین فرض می‌کنیم USER نام کاربری هاست شماست.

برای انجام این تغییر، در ویرایشگر سفارشی، کد زیر را وارد کنید (یا اگر بخش‌هایی از قبل وجود دارد، در جای مناسب اضافه کنید):

|*if SUB=”test”|

|?DOCROOT=/home/USER/domains/test.example.com/public_html|

|*endif|

اجازه دهید بخش‌های این دستور را توضیح دهیم:

  • |*if SUB=”test”| – این خط یک شرط را آغاز می‌کند. به DirectAdmin می‌گوید: «اگر زیردامنه برابر با test بود…» . با این کار اطمینان حاصل می‌کنیم تنظیماتی که اعمال می‌کنیم فقط برای زیردامنه‌ی test درنظر گرفته شود. (اگر این شرط را نگذاریم و مستقیم DocumentRoot را تغییر دهیم، آن تغییر ممکن است روی دامنه‌ی اصلی و سایر زیردامنه‌ها نیز اثر بگذارد که قطعاً نمی‌خواهیم چنین شود.)
  • خط بعدی |?DOCROOT=…| – این دستور مقدار متغیر DOCROOT را تعیین می‌کند. DirectAdmin در قالب‌های وب‌سرور خود از متغیر DOCROOT برای تعیین مسیر روت استفاده می‌کند. ما با این خط داریم به سیستم می‌گوییم که DocumentRoot موردنظر ما برای این شرط، فلان مسیر است (در مثال ما /home/USER/domains/test.example.com/public_html). دقت کنید مسیر را کاملاً و صحیح وارد کنید. بهتر است مسیر را عیناً از طریق File Manager کپی کنید تا اشتباهی رخ ندهد. همچنین اطمینان یابید که دقیقاً همان پوشه‌ای است که می‌خواهید سایت از آن سرو شود.
  • |*endif| – این خط پایان شرط if را مشخص می‌کند. یعنی پایان بخش تنظیمات مخصوص زیردامنه‌ی test. هر تغییری که بین if و endif مشخص کردیم (در اینجا تعیین DOCROOT)، فقط برای زیردامنه‌ی test اعمال خواهد شد.

بعد از وارد کردن این قطعه‌کد، یک بار دیگر آن را چک کنید. آیا نام زیردامنه را درست نوشته‌اید؟ (مثلاً test با حروف کوچک همان‌طور که در DirectAdmin ایجاد شده.) آیا مسیر کامل است و اشتباه املایی یا فاصله اضافی ندارد؟ این موارد ساده به نظر می‌رسند ولی باور کنید خیلی از خطاهای پیکربندی به خاطر یک اشتباه کوچک در همین جزئیات رخ می‌دهد.

اکنون تغییرات را ذخیره (Save) کنید. معمولاً DirectAdmin دکمه‌ای مثل “Save” یا “Save Custom Configuration” دارد که با کلیک بر آن، تنظیمات سفارشی شما ثبت می‌شود.

توجه مهم: DirectAdmin پس از ذخیره، به صورت خودکار تنظیمات جدید را در فایل‌های پیکربندی Apache اعمال می‌کند. اما اغلب، این تغییر تا زمانی که سرویس Apache را بازنشانی (ری‌استارت) نکنید، اثر نخواهد کرد. بعضی از هاستینگ‌ها طوری تنظیم کرده‌اند که با Save کردن، Apache خودکار ری‌لود شود. اما برای اطمینان، بهتر است خودتان این کار را انجام دهید که در گام بعدی توضیح می‌دهیم.

گام چهارم: ری‌استارت کردن Apache (یا وب‌سرور مربوطه)

حال که تنظیمات جدید DocumentRoot را ذخیره کرده‌اید، باید وب‌سرور را مجدداً راه‌اندازی کنید تا تغییرات اعمال شوند. اگر دسترسی SSH با کاربر روت به سرور دارید، این کار ساده است: کافیست یک ترمینال باز کنید و وارد سرور شوید، سپس بسته به نوع سرویس وب‌سرور خود، یکی از دستورات زیر را اجرا کنید:

برای Apache در سیستم‌های مبتنی بر CentOS یا RHEL و… (که سرویس را httpd می‌نامند):

nginx

CopyEdit

service httpd restart

برای Apache در سیستم‌های Debian/Ubuntu (که سرویس را apache2 می‌نامند):

nginx

CopyEdit

service apache2 restart

اگر از وب‌سرور دیگری استفاده می‌کنید (مثلاً LiteSpeed یا Nginx به عنوان وب‌سرور اصلی)، باید سرویس متناظر را ری‌استارت کنید. هرچند، در اغلب موارد وقتی صحبت از Custom HTTPD Configurations در DirectAdmin می‌کنیم، منظور تنظیمات Apache است (حتی اگر Nginx در نقش پروکسی جلوی Apache باشد، باز Apache در پس‌زمینه سرو کار با DocumentRoot دارد).

نکته: در صورتی که دسترسی روت ندارید (مثلاً در یک هاست اشتراکی هستید)، نمی‌توانید مستقیماً Apache را ری‌استارت کنید. در برخی موارد، صِرف ذخیره‌ی تنظیمات در DirectAdmin، Apache را ری‌لود می‌کند؛ یا ممکن است لازم باشد از بخش مدیریت هاست (در صورتی که فراهم شده) ری‌استارتی انجام دهید. اگر هیچ راهی نبود، ناچارید کمی صبر کنید – معمولاً هاست‌های اشتراکی هر چند دقیقه یک بار یا در بازه‌های مشخص، تنظیمات را بارگذاری مجدد می‌کنند. در غیر اینصورت، شاید نیاز باشد به بخش پشتیبانی هاست تیکت بزنید تا وب‌سرور را برایتان ری‌استارت کنند.

گام پنجم: آزمودن تغییرات در مرورگر (لحظه‌ی حقیقت!)

اکنون لحظه‌ی موعود فرا رسیده است: باید ببینیم زحمات شما نتیجه داده یا خیر. مرورگر وب خود را باز کنید و آدرس زیردامنه‌ی موردنظر را وارد نمایید (مثلاً http://test.example.com). اگر همه چیز را درست انجام داده باشید، باید محتوایی که در مسیر جدید قرار داده‌اید بارگذاری شود. یعنی اگر مثلاً یک فایل index.html با عبارت “Hello” در پوشه‌ی جدید گذاشته‌اید، الان باید مرورگر همان را نشان دهد.

اگر سایت بالا آمد و محتوای صحیح را دیدید، تبریک می‌گوییم! شما با موفقیت DocumentRoot زیردامنه را تغییر داده‌اید. ممکن است ظاهر سایت دقیقاً به خاطر تغییر مسیر کمی متفاوت باشد (مثلاً اگر لینک‌هایی در صفحات شما وجود دارد که مسیرشان نسبت به روت قبلی تعریف شده بودند)، اما اصل کار که بارگذاری از پوشه‌ی جدید است انجام شده.

اما اگر با صحنه‌ی سفید مواجه شدید یا خطایی مانند 403 Forbidden یا 404 Not Found مشاهده کردید، نگران نشوید. این مشکلات معمولاً با کمی بررسی رفع می‌شوند. موارد زیر را کنترل کنید:

  • وجود پوشه و فایل‌های لازم: مطمئن شوید مسیری که به عنوان DocumentRoot تنظیم کرده‌اید واقعاً وجود دارد و درست تایپ شده است. کوچک‌ترین اشتباه در نوشتن مسیر می‌تواند باعث شود Apache نتواند پوشه را پیدا کند. همچنین بررسی کنید که یک فایل صفحه‌ی اصلی (مثل index.php یا index.html) در آن مسیر وجود دارد. در غیر این صورت، Apache احتمالاً خطای 403 یا لیست دایرکتوری خالی نشان می‌دهد.
  • سطح دسترسی (Permissions): اگر خطای 403 Forbidden می‌بینید، یکی از دلایل رایج آن می‌تواند مجوزهای نادرست پوشه یا فایل‌ها باشد. بررسی کنید که سطح دسترسی پوشه‌ی جدید حداقل ۷۵۵ و فایل‌های داخل آن ۶۴۴ باشد (البته بسته به تنظیمات سرور، ممکن است نیاز باشد مالکیت فایل‌ها هم به کاربر صحیح وب‌سرور تنظیم شده باشد، ولی در هاست‌های اشتراکی معمولاً این مورد خودکار درست است). به زبان ساده، مطمئن شوید که سرور اجازه‌ی خواندن محتویات آن پوشه را دارد.
  • کش (Cache) و DNS: گاهی ممکن است تغییر مسیر را درست انجام داده باشید ولی کش مرورگر یا کش DNS سیستم شما هنوز به مسیر قبلی اشاره کند. یک‌بار کش مرورگر را پاک کنید یا از حالت ناشناس (Incognito) استفاده کنید. همچنین اگر زیردامنه را تازه ساخته‌اید، به یاد داشته باشید که انتشار DNS ممکن است تا چند دقیقه طول بکشد. هرچند این مورد معمولاً باعث خطای 404 نمی‌شود مگر اینکه زیردامنه اصولاً شناخته نشده باشد.

با بررسی موارد بالا، در اکثر مواقع مشکل رفع خواهد شد. اگر همچنان مشکل پا برجاست، دقیقاً به پیام خطا دقت کنید و در صورت امکان لاگ خطاهای Apache (/var/log/httpd یا /var/log/apache2 و فایل‌های error_log مربوطه) را چک کنید تا سرنخ بهتری به دست آورید. کاربران حرفه‌ای معمولاً با دیدن لاگ خطا به سرعت متوجه می‌شوند ایراد از کجاست (مثلاً ممکن است خطا بگوید پوشه‌ای وجود ندارد یا دسترسی ممکن نیست).

نکات ویژه برای پروژه‌های خاص (مثال: Laravel)

نکات ویژه برای پروژه‌های خاص (مثال: Laravel)

تا اینجا روش عمومی کار را یاد گرفتیم. بد نیست یک نکته‌ی مهم را درباره برخی فریم‌ورک‌ها و پروژه‌های خاص مطرح کنیم که اگر با آنها سروکار دارید، به مشکل برنخورید. به عنوان نمونه، فریم‌ورک Laravel را در نظر بگیرید. در ساختار Laravel تمام فایل‌های قابل دسترسی وب (مانند index.php و سایر فایل‌های frontend) داخل پوشه‌ی public قرار دارند و بقیه‌ی پروژه (Routeها، کنترلرها، Viewها و …) یک لایه بالاتر از public هستند و نباید مستقیم در معرض وب قرار بگیرند. حال فرض کنید شما یک پروژه‌ی Laravel را روی هاست DirectAdmin مستقر کرده‌اید. معمولاً برای امنیت و راحتی، محتویات اصلی Laravel را بیرون از public_html نگه می‌دارند و فقط پوشه‌ی public را به عنوان روت وب تنظیم می‌کنند.

اگر بخواهید این Laravel را روی زیردامنه‌ای اجرا کنید، حتماً دقت داشته باشید که DocumentRoot را روی پوشه‌ی public تنظیم کنید، نه یک لایه بالاتر. برای مثال اگر پروژه‌ی Laravel شما در مسیر /home/USER/laravel_project قرار دارد و پوشه‌ی public آن مثلاً در /home/USER/laravel_project/public است، شما باید DocumentRoot زیردامنه را به این پوشه‌ی public تنظیم کنید. در غیراینصورت، اگر مسیر DocumentRoot را اشتباهاً به /home/USER/laravel_project (یعنی بدون public) بدهید، وقتی زیردامنه را باز می‌کنید، محتویات سایت به درستی لود نخواهد شد و احتمالاً با یک صفحه‌ی خالی یا خطا مواجه می‌شوید، چون Apache دنبال فایل index در مسیری می‌گردد که اصلاً فایل‌های وب آنجا نیستند.

این نکته‌ی Laravel را به طور کلی می‌توان به هر پروژه‌ی دیگری که ساختار مشابه دارد تعمیم داد: همیشه مطمئن شوید مسیری که به عنوان DocumentRoot تعریف می‌کنید، دقیقاً پوشه‌ای است که فایل‌های وب در آن قرار دارند. اگر پروژه‌ای پوشه‌ی مخصوص assets یا public دارد، همان را تنظیم کنید. اگر پروژه‌ای مثلاً یک فایل index.php در ریشه‌ی خودش دارد، خب همان پوشه‌ی اصلی پروژه DocumentRoot می‌شود. خلاصه اینکه گاهی یک اشتباه کوچک در انتخاب پوشه می‌تواند به کار نکردن کل سایت منجر شود.

بررسی مشکلات رایج و محدودیت‌ها در تغییر DocumentRoot زیردامنه

تغییر DocumentRoot زیردامنه ممکن است در نگاه اول ساده به‌نظر برسد (چند خط تنظیمات و تمام!) اما دنیای میزبانی وب همیشه آنقدرها هم بدون پیچیدگی نیست. برخی اوقات با موانع یا شرایط خاصی روبه‌رو می‌شوید که دانستن آنها از قبل می‌تواند جلوی سردرگمی شما را بگیرد. در این بخش به چند نکته‌ی تکمیلی و مشکل رایج اشاره می‌کنیم:

۱. غیرفعال بودن گزینه‌ی “Custom HTTPD Configurations”

اگر طبق مراحل جلو رفتید ولی در پنل DirectAdmin خود اصلاً گزینه‌ای به نام Custom HTTPD Configurations ندیدید، احتمالأ دسترسی لازم برای این کار را ندارید. در هاست‌های اشتراکی، معمولاً شرکت میزبان برای جلوگیری از تغییرات مخرب یا ناخواسته، این امکان را از دسترس کاربران عادی خارج می‌کند. همچنین ممکن است پنل شما قدیمی باشد یا توسط میزبان سفارشی شده باشد که این منو را در جای دیگری پنهان کرده است. در چنین وضعیتی، بهترین کار این است که با پشتیبانی هاست تماس بگیرید. توضیح دهید که نیاز دارید DocumentRoot یک زیردامنه تغییر کند. اکثر شرکت‌ها یا این دسترسی را به‌طور موقت برای شما فعال می‌کنند یا خودشان طبق درخواست شما تغییر را انجام می‌دهند. اگر میزبان شما بنا به سیاست امنیتی اجازه‌ی این کار را به هیچ وجه ندهد، ممکن است مجبور شوید راهکار دیگری بیاندیشید (مثلاً تغییر هاستینگ یا ارتقاء سرویس به VPS که کنترل کامل دارید).

۲. محدودیت‌های هاست اشتراکی

برخی از هاست‌های اشتراکی اساساً اجازه‌ی تغییر در تنظیمات وب‌سرور در سطح کاربران عادی را نمی‌دهند. دلیلش هم واضح است: تنظیمات Apache در چنین سرورهایی به صورت کلی و اشتراکی است و تغییر DocumentRoot برای یک زیردامنه شاید روی ساختار کلی سرور تاثیر بگذارد یا مشکلات امنیتی ایجاد کند. اگر در چنین محیطی هستید و پشتیبانی هم همکاری نمی‌کند، دو راه‌حل بیشتر ندارید: یا سرویس خود را به پلنی ارتقاء دهید که این امکان را داشته باشد (مثلاً یک سرور مجازی اختصاصی که دسترسی روت داشته باشید) یا این‌که به یک راهکار غیرمستقیم متوسل شوید. یکی از راهکارهای غیرمستقیم، استفاده از فایل .htaccess برای ریدایرکت یا تغییر مسیر است. مثلا شما می‌توانید در پوشه‌ی پیش‌فرض زیردامنه (که تغییرش دست شما نیست) یک .htaccess قرار دهید که تمام درخواست‌ها را به پوشه‌ی دلخواه شما (مثلاً یک فولدر در جای دیگر) منتقل کند. البته این روش همیشه ایدئال نیست و معایبی دارد: از جمله اینکه آدرس URL در مرورگر ممکن است تغییر کند یا کاربر را متوجه ریدایرکت کند، و همچنین مقداری سربار اضافی ایجاد می‌شود. اما در مواقع اضطراری که هیچ راه دیگری ندارید، می‌تواند به عنوان یک مسکن موقت جوابگو باشد.

۳. اضافه شدن خودکار نام زیردامنه در مسیر (مشکل دوبل شدن مسیر)

یک نکته‌ی فنی که کاربران دقیق ممکن است متوجه شوند این است که DirectAdmin در قالب پیش‌فرض خود، برای زیردامنه‌ها مسیر DocumentRoot را به صورت …/public_html/SUBDOMAIN تنظیم می‌کند. حالا اگر ما به روش بالا یک مقدار جدید به DOCROOT بدهیم، ممکن است DirectAdmin به طور پیش‌فرض دوباره نام زیردامنه را به انتهای آن اضافه کند. نتیجه چه می‌شود؟ فرض کنید ما DOCROOT را /home/USER/domains/test.example.com/public_html گذاشتیم. اگر DirectAdmin قالب را تغییر ندهد، DocumentRoot نهایی که Apache می‌خواند ممکن است این شود: /home/USER/domains/test.example.com/public_html/test (یعنی یک /test اضافی!). این طبیعتاً چیزی نیست که ما می‌خواستیم.

خوشبختانه در نسخه‌های جدیدتر DirectAdmin معمولاً این مشکل را در نظر گرفته‌اند. وقتی از روش Custom HTTPD Override استفاده می‌کنید، سیستم سعی می‌کند هوشمندانه مقداردهی را طوری انجام دهد که دو بار نام زیردامنه اضافه نشود. اما اگر احیاناً پس از انجام تنظیمات، متوجه شدید که هنوز Apache به مسیری شامل دو بار نام زیردامنه اشاره می‌کند، نیاز به دستکاری قالب‌های پیش‌فرض DirectAdmin دارید که البته این کار واقعاً در حیطه‌ی وظایف مدیر سرور است و روی هاست اشتراکی انجام‌شدنی نیست.

برای اطلاعات تکمیلی در این حالت خاص: یک مدیر سرور می‌تواند فایل‌های قالب مربوط به VirtualHost زیردامنه را در مسیر /usr/local/directadmin/data/templates/ کپی کند و تغییر دهد تا متغیر SUB در جای دیگری از مسیر قرار گیرد. این بحث خارج از موضوع این مقاله برای کاربران عادی است، اما صرفاً بدانید که چنین امکانی در پشت صحنه وجود دارد و اگر شما خودتان مدیر سرور هستید و مشکل دوبرابر شدن نام پوشه را دارید، با ویرایش قالب‌ها می‌توانید آن را حل کنید. در اغلب موارد اما، استفاده از همان snippet شرطی |*if SUB=”name”| … |*endif| که در بالا دادیم، بدون نیاز به تغییر دستی قالب‌ها نتیجه‌ی مطلوب را می‌دهد.

۴. تعیین DocumentRoot دلخواه در هنگام ایجاد زیردامنه (ویژگی‌های جدید DirectAdmin)

DirectAdmin همگام با نیاز کاربران حرفه‌ای پیشرفت کرده است. اگر از نسخه‌های جدید DirectAdmin (به‌ویژه در قالب Evolution) استفاده می‌کنید، شاید متوجه یک قابلیت جالب شده باشید: هنگامی که می‌خواهید یک زیردامنه‌ی جدید بسازید، گاهی اوقات پنل از شما یک مسیر (Path) برای DocumentRoot آن زیردامنه می‌پرسد. برای مثال، یک فیلد اختیاری وجود دارد که می‌توانید مسیر دلخواه را همان موقع وارد کنید. اگر چنین امکانی در پنل شما فعال است، کارتان بسیار ساده می‌شود: کافیست هنگام ساخت زیردامنه، مسیر موردنظرتان را تایپ کنید. در این صورت DirectAdmin از همان ابتدا به‌جای ساخت پوشه در مسیر پیش‌فرض، از مسیری که شما تعیین کرده‌اید استفاده خواهد کرد.

این ویژگی دقیقاً برای همان اهدافی اضافه شده که ما در این مقاله به صورت دستی انجام دادیم، یعنی انعطاف بیشتر در ساختاردهی فایل‌ها. البته دو نکته را در نظر داشته باشید: اول اینکه این قابلیت روی تمامی سرورها یا تمامی سرویس‌دهنده‌ها فعال نیست. فعال بودن آن وابسته به تنظیمات سرور (یک گزینه‌ای به نام allow_subdomain_docroot_override در فایل تنظیمات DirectAdmin وجود داشت که باید روی ON باشد، هرچند در نسخه‌های خیلی جدید این امکان به طور پیش‌فرض فعال است) و همچنین وجود حداقل دو نسخه‌ی PHP روی سرور است. برخی شرکت‌های هاست ممکن است این گزینه را غیرفعال کنند. دوم اینکه حتی با وجود این قابلیت، اگر از رابط کاربری قدیمی‌تر (Skin قدیمی) استفاده کنید ممکن است آن فیلد را نبینید. در صورت تمایل می‌توانید از مدیر سرور بخواهید قالب پنل شما را به Evolution تغییر دهد تا امکانات جدید را در اختیار داشته باشید.

در کل، اگر شانس با شما یار باشد و گزینه‌ی DocumentRoot هنگام ایجاد ساب‌دامین در دسترس باشد، توصیه می‌کنیم از همان ابتدا مسیر دلخواه را تنظیم کنید تا دیگر نیاز به مراحل بعدی و ری‌استارت Apache نداشته باشید. اما اگر این گزینه را ندارید، جای نگرانی نیست؛ همان روش دستی که مفصل توضیح دادیم شما را به هدفتان می‌رساند.

حرف آخر: زیردامنه در اختیار شماست

تغییر DocumentRoot زیردامنه شاید در نگاه اول یک کار فنی پیشرفته به نظر برسد، اما دیدید که با کمی دقت و دانستن مسیر درست، تبدیل به کاری شدنی و نسبتاً سرراست می‌شود. شما به عنوان یک کاربر حرفه‌ای اکنون کنترل بیشتری روی ساختار هاست و وب‌سایت‌های خود دارید. می‌توانید پروژه‌های متنوعی را روی زیردامنه‌ها مدیریت کنید، بدون آنکه مجبور باشید خودتان را محدود به الگوهای پیش‌فرض کنید. هر زیردامنه می‌تواند دنیای مستقلی داشته باشد: یکی در پوشه‌ی پیش‌فرض خودش، یکی در یک فولدر مجزا برای مثلاً نسخه‌ی آزمایشی سایت، یکی در دل یک پروژه‌ی بزرگ‌تر مثل Laravel و… همه‌ی اینها با پیکربندی مناسب امکان‌پذیر است.

در پایان به دو نکته‌ی کوتاه اشاره می‌کنیم: اول اینکه هر تغییری که در تنظیمات هاست انجام می‌دهید بهتر است مستند شود. یعنی جایی برای خودتان یادداشت کنید که چه زمانی چه تغییری دادید. این کار مخصوصاً وقتی چندین تغییر سفارشی انجام می‌دهید به کمکتان می‌آید تا اگر بعداً مشکلی پیش آمد یا خواستید سرور را ارتقاء دهید، بدانید چه تنظیمات ویژه‌ای داشته‌اید. دوم اینکه همیشه حواستان به به‌روزرسانی‌ها باشد. DirectAdmin و سایر نرم‌افزارهای میزبانی مدام در حال بهبود هستند. شاید در آینده‌ای نزدیک، تغییر DocumentRoot حتی از الآن هم ساده‌تر شود یا ابزارهای گرافیکی بهتری برایش فراهم شود. پس از یادگیری این مهارت، گوشه‌ی ذهن‌تان نگه دارید که گهگاه ویژگی‌های جدید پنل‌تان را بررسی کنید.

امیدواریم این راهنما برایتان مفید بوده باشد و توانسته باشید زیردامنه‌ی خود را دقیقاً همان‌جایی که می‌خواهید نشاند. حالا دیگر کنترل همه‌چیز دست شماست و هر زیردامنه‌ای هر مسیری که شما بخواهید منزلگاه فایل‌های وب‌سایت شما خواهد بود. موفق باشید و از میزبانی حرفه‌ای لذت ببرید!