اگر وب‌سایت شما روی Apache اجرا می‌شود، فایل .htaccess یکی از مهم‌ترین ابزارهایی است که می‌تواند بدون نیاز به تغییر مستقیم در تنظیمات اصلی سرور، رفتار سایت را در سطح یک پوشه یا مسیر کنترل کند. با استفاده از این فایل می‌توانید ریدایرکت انجام دهید، صفحه خطای سفارشی بسازید، دسترسی به بخش‌هایی از سایت را محدود کنید، قوانین بازنویسی URL تعریف کنید و بسیاری از تنظیمات دیگر را اعمال کنید. 

در این مقاله یاد می‌گیرید فایل .htaccess چیست، چگونه آن را در Apache فعال کنید، چطور بسازید و مهم‌ترین کاربردهای آن در مدیریت سایت چیست.

فایل .htaccess چیست؟

فایل .htaccess یک فایل پیکربندی در Apache است که به‌صورت per-directory عمل می‌کند؛ یعنی تنظیمات آن فقط روی همان پوشه و زیرپوشه‌هایش اثر می‌گذارد. این فایل مخفی است و نام آن با یک نقطه شروع می‌شود. Apache در هر درخواست، در صورت فعال بودن این قابلیت، فایل .htaccess را بررسی می‌کند تا تنظیمات مربوط به همان مسیر را اعمال کند. 

از مهم‌ترین کاربردهای .htaccess می‌توان به این موارد اشاره کرد:

  • ایجاد ریدایرکت 301 و 302

  • بازنویسی URLها با mod_rewrite

  • ساخت صفحات خطای سفارشی مثل 404

  • محافظت از پوشه‌ها با رمز عبور

  • کنترل دسترسی کاربران یا IPها

  • اعمال برخی تنظیمات امنیتی و عملکردی

چه زمانی از .htaccess استفاده کنیم؟

اگر روی هاست اشتراکی هستید یا به فایل اصلی تنظیمات Apache دسترسی ندارید، .htaccess بهترین گزینه است. اما اگر سرور را خودتان مدیریت می‌کنید، معمولاً بهتر است قوانین دائمی را در فایل اصلی کانفیگ Apache قرار دهید؛ چون Apache برای هر درخواست فایل .htaccess را بررسی می‌کند و این موضوع می‌تواند اندکی روی عملکرد اثر بگذارد. خود DigitalOcean هم توصیه می‌کند در سرورهایی که کنترل کامل دارید، تا جای ممکن تنظیمات پایدار را در کانفیگ اصلی نگه دارید. 


پیش‌نیازها

برای استفاده از .htaccess بهتر است این شرایط را داشته باشید:

  • یک سرور لینوکسی مثل Ubuntu

  • وب‌سرور Apache نصب‌شده

  • دسترسی به Virtual Host دامنه

  • در صورت نیاز، دامنه‌ای که به سرور اشاره می‌کند

  • دسترسی کافی برای ری‌استارت کردن Apache

طبق راهنمای DigitalOcean، برای تمرین این تنظیمات معمولاً از فایل Virtual Host دامنه و مسیرهایی مانند /var/www/your_domain استفاده می‌شود. 


چگونه .htaccess را در Apache فعال کنیم؟

به‌صورت پیش‌فرض، Apache فقط زمانی فایل .htaccess را می‌خواند که در بلاک <Directory> گزینه AllowOverride فعال شده باشد. مهم‌ترین پیش‌نیاز برای کارکرد .htaccess همین گزینه است. 

1) فایل Virtual Host را باز کنید

sudo nano /etc/apache2/sites-available/your_domain.conf

2) داخل بلاک

VirtualHost

، تنظیمات دایرکتوری را اضافه کنید

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/your_domain>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

نکته کلیدی در این بخش، AllowOverride All است. بدون این خط، قوانین داخل .htaccess معمولاً نادیده گرفته می‌شوند. همچنین در نسخه‌های جدید Apache 2.4 باید از Require all granted استفاده شود و سینتکس‌های قدیمی‌تر مثل Allow from all دیگر رویکرد اصلی توصیه‌شده نیستند. 

3) Apache را ری‌استارت کنید

sudo service apache2 restart

چگونه فایل .htaccess بسازیم؟

بعد از فعال‌سازی AllowOverride، می‌توانید فایل .htaccess را در ریشه سایت یا هر پوشه دلخواه بسازید. اگر DocumentRoot شما مسیر زیر باشد:

/var/www/your_domain

فایل را این‌طور ایجاد کنید:

sudo nano /var/www/your_domain/.htaccess

از این به بعد هر قانونی که داخل این فایل قرار دهید، روی همان پوشه و زیرپوشه‌هایش اعمال می‌شود. 


کاربردهای مهم فایل .htaccess

1) ریدایرکت URLها

یکی از رایج‌ترین استفاده‌های .htaccess، ریدایرکت آدرس‌هاست. برای مثال اگر بخواهید یک صفحه قدیمی را به صفحه جدید منتقل کنید:

Redirect 301 /old-page https://example.com/new-page

این نوع ریدایرکت برای سئو بسیار مهم است؛ چون به موتورهای جستجو اعلام می‌کند صفحه به‌صورت دائمی منتقل شده است.

2) ریدایرکت www به بدون www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

3) ریدایرکت HTTP به HTTPS

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

این قانون برای امنیت و سئو هر دو مهم است، چون نسخه امن سایت را به‌عنوان نسخه اصلی تثبیت می‌کند.


ساخت صفحه خطای سفارشی 404 و 500

فایل .htaccess اجازه می‌دهد صفحات خطای پیش‌فرض و خشک سرور را با صفحات سفارشی و کاربرپسند جایگزین کنید. DigitalOcean هم به خطاهای رایج مانند 400، 401، 403، 404 و 500 اشاره می‌کند. 

نمونه:

ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

مزیت این کار:

  • تجربه کاربری بهتر

  • کاهش نرخ خروج

  • هدایت کاربر به صفحات مفید

  • بهبود ساختار داخلی سایت


محافظت از پوشه با رمز عبور

یکی دیگر از کاربردهای مهم .htaccess، رمزگذاری روی پوشه‌هاست. برای این کار ابتدا باید با دستور htpasswd یک فایل حاوی نام کاربری و رمز عبور رمزنگاری‌شده بسازید. در راهنمای DigitalOcean از نمونه زیر استفاده شده است: 

sudo htpasswd -c /etc/apache2/.htpasswd sammy

سپس داخل .htaccess پوشه موردنظر این خطوط را قرار دهید:

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

این روش برای محافظت از پنل‌های داخلی، محیط staging یا بخش‌های خصوصی سایت بسیار کاربردی است. 


 نکات امنیتی و عملکردی در استفاده از .htaccess

فایل .htaccess بسیار قدرتمند است، اما باید با دقت از آن استفاده شود. چون Apache در هر درخواست آن را بررسی می‌کند، استفاده بیش‌ازحد یا پیچیده‌کردن قوانین می‌تواند روی سرعت و دیباگ‌پذیری اثر منفی بگذارد. به همین دلیل، برای سرورهایی که کاملاً تحت کنترل شما هستند، بهتر است تنظیمات دائمی را به فایل اصلی Apache منتقل کنید. 

برای استفاده بهتر:

  • فقط قوانین ضروری را نگه دارید

  • از ریدایرکت‌های زنجیره‌ای پرهیز کنید

  • ابتدا از Redirect ساده استفاده کنید و فقط در صورت نیاز به سراغ RewriteRule بروید

  • بعد از هر تغییر، پاسخ هدرها را با curl -I تست کنید

DigitalOcean هم برای رفع مشکل حلقه‌های ریدایرکت و رفتار غیرمنتظره بازنویسی، توصیه می‌کند از قوانین ساده شروع کنید و مرحله‌به‌مرحله تست بگیرید. 


خطاهای رایج .htaccess و روش رفع آن‌ها

1) قوانین

.htaccess

اصلاً اعمال نمی‌شوند

رایج‌ترین دلیل این مشکل، فعال نبودن AllowOverride است. همچنین باید مطمئن شوید فایل .htaccess دقیقاً در همان مسیری قرار دارد که Apache از آن سرویس می‌دهد و دسترسی خواندن فایل نیز برقرار است. 

2) حلقه ریدایرکت ایجاد می‌شود

این مشکل معمولاً وقتی رخ می‌دهد که شرط‌های RewriteCond به‌درستی نوشته نشده باشند یا چند قانون با هم تداخل داشته باشند. بررسی Location header و کدهای پاسخ با curl -I کمک زیادی می‌کند. 

3) خطای 500 Internal Server Error

معمولاً به دلیل دستور اشتباه، ماژول غیرفعال یا سینتکس نادرست رخ می‌دهد. در این شرایط باید لاگ خطای Apache را بررسی کنید و پیام‌هایی که به .htaccess یا RewriteRule اشاره می‌کنند پیدا کنید. 


 تفاوت Redirect و RewriteRule

برای بسیاری از کارهای ساده مثل انتقال یک URL به URL دیگر، Redirect انتخاب بهتری است؛ چون خواناتر و کم‌ریسک‌تر است. اما اگر بخواهید الگوهای پیچیده‌تری را مدیریت کنید، RewriteRule با کمک mod_rewrite انعطاف بسیار بیشتری دارد. بر اساس توصیه DigitalOcean، برای جلوگیری از پیچیدگی و خطا، بهتر است اول از راهکارهای ساده شروع کنید. 


پرسش‌های متداول

آیا فایل .htaccess فقط در Apache کار می‌کند؟

بله، .htaccess مربوط به Apache است. اگر از Nginx استفاده می‌کنید، باید تنظیمات مشابه را در فایل کانفیگ Nginx بنویسید.

چرا فایل .htaccess من کار نمی‌کند؟

معمولاً به یکی از این دلایل:

  • AllowOverride غیرفعال است

  • فایل در مسیر اشتباه قرار دارد

  • مجوزهای فایل درست نیست

  • دستورهای داخل فایل اشتباه هستند 

آیا استفاده از .htaccess روی سرعت سایت اثر دارد؟

بله، چون Apache در هر درخواست این فایل را بررسی می‌کند. روی هاست اشتراکی معمولاً طبیعی است، اما در سرور اختصاصی بهتر است قوانین دائمی را به کانفیگ اصلی منتقل کنید. 

آیا برای ریدایرکت سایت باید حتماً از RewriteRule استفاده کنم؟

نه. برای ریدایرکت‌های ساده، Redirect اغلب بهتر و ساده‌تر است. RewriteRule زمانی مناسب است که منطق پیچیده‌تری لازم داشته باشید. 


جمع‌بندی

فایل .htaccess یکی از مهم‌ترین ابزارهای مدیریت سایت در Apache است. اگر به تنظیمات اصلی سرور دسترسی ندارید، این فایل به شما اجازه می‌دهد بدون تغییر کانفیگ اصلی، قابلیت‌هایی مثل ریدایرکت، مدیریت خطاها، محدودسازی دسترسی و بازنویسی URLها را پیاده‌سازی کنید. فقط باید یادتان باشد که برای کارکرد صحیح آن، AllowOverride باید فعال باشد و قوانین نیز با دقت نوشته شوند. 

آخرین به روز رسانی: 20 اسفند 1404