Document Root پوشه‌ای است که وب‌سرور برای هر دامنه باز می‌کند. برای دامنه‌های اضافه و ساب‌دامین‌ها می‌شود آن را در سی‌پنل، بخش Domains، عوض کرد. برای دامنه‌ی اصلی هاست، پوشه همیشه public_html است و قابل تغییر نیست؛ ولی با چند خط htaccess می‌شود سایت را از یک زیرپوشه اجرا کرد بدون اینکه آدرس عوض شود.

کی لازم می‌شود؟

وضعیت چه می‌خواهید
پروژه‌ی لاراول دامنه باید به پوشه‌ی public پروژه اشاره کند، نه ریشه‌ی آن
چند سایت روی یک هاست هر دامنه پوشه‌ی مستقل داشته باشد، بیرون از public_html
وردپرس در زیرپوشه نصب شده با آدرس اصلی باز شود
نسخه‌ی جدید سایت در پوشه‌ی دیگر آماده است دامنه را یک‌جا به آن بچرخانید

پوشه‌ی فعلی هر دامنه

در سی‌پنل Domains را باز کنید. ستون Document Root مسیر هر دامنه را نشان می‌دهد و با کلیک روی آن، همان پوشه در File Manager باز می‌شود.

فهرست دامنه‌ها در سی‌پنل با ستون Document Root و Force HTTPS Redirect
ستون Document Root در بخش Domains؛ برای دامنه‌های اضافه از Manage قابل تغییر است

دامنه‌ی اضافه و ساب‌دامین

  1. در بخش Domains کنار دامنه روی Manage بزنید.
  2. در کادر New Document Root مسیر تازه را بنویسید؛ نسبت به پوشه‌ی خانه، مثل myapp/public.
  3. Update را بزنید.

پوشه باید وجود داشته باشد. فایل‌های قبلی جابه‌جا نمی‌شوند؛ فقط دامنه به جای دیگری اشاره می‌کند. اگر گواهی SSL دامنه با روش فایل تأیید می‌شود، بعد از تغییر یک بار وضعیت SSL را ببینید. (وضعیت SSL)

دامنه‌ی اصلی: راه htaccess

فرض کنید سایت در public_html/site است و می‌خواهید با آدرس اصلی باز شود. این قانون را در htaccess داخل public_html بگذارید:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule ^(.*)$ /site/$1 [L]

بازدیدکننده همان آدرس اصلی را می‌بیند ولی فایل‌ها از پوشه‌ی site خوانده می‌شوند. اگر چند دامنه روی همین public_html دارید، یک شرط برای نام دامنه هم اضافه کنید تا فقط همان دامنه منتقل شود:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]

لاراول روی دامنه‌ی اصلی

پوشه‌ی public لاراول باید ریشه‌ی وب باشد و بقیه‌ی پروژه (از جمله فایل .env) بیرون از دسترس وب. دو راه دارید:

راه چطور نکته
پروژه بیرون، محتوای public داخل public_html پروژه را کنار public_html بگذارید، محتوای پوشه‌ی public را به public_html ببرید و مسیرها را در index.php اصلاح کنید امن‌ترین؛ فایل‌های پروژه اصلاً زیر وب نیستند
قانون htaccess به پوشه‌ی public پروژه داخل public_html و قانون بالا با مقصد /public/ ساده‌تر، ولی باید دسترسی به فایل‌های حساس را جدا ببندید

ساده‌تر از هر دو این است که پروژه را روی یک دامنه‌ی اضافه یا ساب‌دامین بگذارید و Document Root را مستقیم روی پوشه‌ی public تنظیم کنید. (هاست لاراول)

وردپرس در زیرپوشه

وردپرس راه مخصوص خودش را دارد و به قانون بالا نیاز نیست:

  1. در تنظیمات عمومی، «نشانی وردپرس» را با زیرپوشه نگه دارید و «نشانی سایت» را آدرس اصلی بگذارید.
  2. فایل‌های index.php و .htaccess را از زیرپوشه به public_html کپی کنید (نه منتقل).
  3. در index.php کپی‌شده، مسیر /wp-blog-header.php را به /نام‌پوشه/wp-blog-header.php تغییر دهید.
  4. پیوندهای یکتا را یک بار ذخیره کنید.

اگر ممکن است، ساده‌تر و تمیزتر این است که فایل‌ها را به خود public_html منتقل کنید. (انتقال فایل‌ها به پوشه‌ی درست)

بعد از تغییر

  • سایت را با و بدون www، و با https باز کنید.
  • مسیرهای مطلق در فایل تنظیمات (مسیر آپلود، کش، لاگ) را بررسی کنید.
  • تنظیمات PHP به پوشه وابسته است؛ برای پوشه‌ی تازه یک بار MultiPHP INI Editor را ببینید. (تنظیمات PHP)
  • کرون‌هایی که مسیر فایل دارند را به‌روز کنید. (کرون‌جاب)

سوال‌های رایج

چرا دامنه‌ی اصلی قابل تغییر نیست؟

مسیر دامنه‌ی اصلی در تنظیمات سرور ثابت است و از پنل کاربر تغییر نمی‌کند. اگر می‌خواهید دامنه‌ی دیگری دامنه‌ی اصلی هاست شود، آن کار جداست. (تغییر دامنه‌ی اصلی هاست)

Document Root دامنه‌ی اضافه را بیرون از public_html بگذارم؟

بله، بهتر است. دامنه‌ای که پوشه‌اش داخل public_html باشد، از طریق آدرس دامنه‌ی اصلی هم باز می‌شود و محتوای تکراری می‌سازد.

بعد از تغییر، خطای ۴۰۳ یا Index of می‌بینم.

پوشه‌ی تازه فایل index ندارد یا مسیر اشتباه نوشته شده. (خطای ۴۰۳)