لینوکس

آموزش استفاده از فایل .htaccess

مقدمه

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

در این آموزش، یاد می‌گیرید که چطور فایل .htaccess را فعال، بسازید و استفاده کنید؛ به‌همراه برخی کاربردهای رایج و تأثیر آن روی سرعت و امنیت.

نکات کلیدی

  • ‏.htaccess یک فایل Override به تفکیک دایرکتوری است: Apache در هر درخواست، فایل‌های .htaccess را می‌خواند تا پیکربندی آن دایرکتوری و زیردایرکتوری‌هایش را — بدون تغییر پیکربندی اصلی سرور — اعمال کند.
  • ‏AllowOverride باید فعال باشد: Apache فقط زمانی قوانین .htaccess را اعتبار می‌بخشد که بلوک <Directory> مربوطه، ‏AllowOverride را روی مقداری غیر از None تنظیم کرده باشد؛ مانند AllowOverride All برای قابلیت‌هایی که می‌خواهید استفاده کنید.
  • از .htaccess برای هاست اشتراکی و دسترسی محدود استفاده کنید: روی سرورهایی که نمی‌توانید پیکربندی اصلی Apache را ویرایش کنید، ‏.htaccess به مالکان سایت راهی برای مدیریت ریدایرکت‌ها، قوانین mod_rewrite، احراز هویت و سایر رفتارهای خاص هر دایرکتوری می‌دهد.
  • ‏Apache نسخه 2.4 مدرن به‌جای Allow یا Deny از Require استفاده می‌کند: Directiveهای قدیمی‌تر Allow from و Deny from در Apache 2.4 با سینتکس Require جایگزین شده‌اند؛ پس پیکربندی‌های جدید باید به Require all granted و Directiveهای مرتبط تکیه کنند.
  • تا جای ممکن پیکربندی اصلی را ترجیح بدهید: روی سرورهایی که کنترلشان دارید، ‏Apache توصیه می‌کند قوانین دائمی را در فایل‌های پیکربندی اصلی قرار بدهید تا کارایی بهتر و دیباگ ساده‌تر باشد و .htaccess را فقط زمانی استفاده کنید که Override در سطح کاربر لازم است.

پیش‌نیازها

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

  • یک سرور اوبونتو راه‌اندازی‌شده با یک کاربر غیر root دارای دسترسی sudo و فایروال فعال. می‌توانید این کار را با دنبال‌کردن راهنمای «راه‌اندازی اولیه سرور با اوبونتو» انجام دهید.
  • وب‌سرور Apache نصب‌شده روی سرور اوبونتوی شما. نحوه راه‌اندازی آن را با آموزش «نصب وب‌سرور Apache روی اوبونتو» یاد بگیرید. حتماً مرحله ۵ را کامل کرده و یک فایل Virtual Host برای دامنه خود داشته باشید. این آموزش در سراسر متن از your_domain به‌عنوان مثال استفاده کرده و از /etc/apache2/sites-available/your_domain.conf به‌عنوان فایل Virtual Host بهره می‌برد.
  • اگر می‌خواهید با یک دامنه تمرین کنید (اختیاری)، می‌توانید با خرید یک نام دامنه روی Namecheap یا استفاده از ثبت‌کننده دامنه (Registrar) دلخواه خود یکی راه‌اندازی کنید. همچنین به هر دوی رکوردهای DNS زیر برای سرور خود نیاز دارید: دو رکورد A، یکی با your_domain و دیگری با www.your_domain که به IP عمومی سرور شما اشاره کنند. برای جزئیات نحوه افزودن آن‌ها، این مقدمه درباره «DNS پارمین کلود» را دنبال کنید.
  • اگر دوست دارید Virtual Host خود را امن هم کنید، می‌توانید این کار را با یک گواهی معتبر رایگان — مانند راهنمای Let’s Encrypt ما برای Apache — انجام دهید. با این حال، اگر دامنه ندارید، می‌توانید به‌جای آن از یک گواهی Self-Signed استفاده کنید. این نوع گواهی همان نوع رمزنگاری را فراهم می‌کند؛ اما بدون اعتبارسنجی دامنه. برای راه‌اندازی آن، راهنمای «گواهی SSL با امضای خودگردان» ما برای Apache را دنبال کنید.

وقتی راه‌اندازی را تمام کردید، می‌توانید در مراحل بعد، فعال‌سازی و ساخت فایل .htaccess را تمرین کنید.

فعال‌سازی فایل .htaccess

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

با باز کردن فایل Virtual Host مربوط به apache2/sites-available/your_domain.conf با ویرایشگر متن دلخواه خود شروع کنید. اینجا از nano استفاده می‌کنیم:

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

با فرض اینکه مرحله ۵ راهنمای پیش‌نیازیِ نصب Apache را دنبال کرده باشید، این فایل شامل محتوای زیر خواهد بود:

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

<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
</VirtualHost>

بلوک محتوایی Directory زیر را داخل بلوک VirtualHost اضافه کنید تا استفاده از .htaccess فعال شود:

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

<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
                Order allow,deny
                allow from all
                Require all granted
</Directory>
</VirtualHost>

مهم‌ترین خطِ این بلوک محتوایی Directory، ‏AllowOverride All است که استفاده از فایل‌های .htaccess را فعال می‌کند. Directiveهای قدیمی Order و allow برای سازگاری اینجا نگه داشته شده‌اند؛ درحالی‌که خط Require all granted سینتکس توصیه‌شده Apache 2.4 را بازتاب می‌دهد. پس از افزودن این اطلاعات، فایل را ذخیره کرده و ببندید. اگر از nano استفاده می‌کنید، می‌توانید این کار را با فشردن CTRL+X و سپس Y و ENTER انجام دهید.

سپس، Apache را ری‌استارت کنید:

sudo service apache2 restart

حالا که تنظیمات پیکربندی شما برای مجاز دانستن استفاده از فایل‌های .htaccess به‌روزرسانی شده، در مرحله بعد یکی می‌سازید.

ساخت فایل .htaccess

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

اگر پیش‌نیازها را دنبال کرده باشید، دایرکتوری ریشه وب شما در مکان زیر خواهد بود: ‏/var/www/your_domain/.htaccess. برای ساخت یک فایل .htaccess برای وب‌سایت خود، دستور زیر را اجرا کنید:

sudo nano /var/www/your_domain/.htaccess

حالا که چند روش ساخت فایل .htaccess را یاد گرفتید، در ادامه برخی کاربردهای رایج یک صفحه .htaccess را مرور می‌کنیم.

موارد کاربرد رایج برای .htaccess

پنج کاربرد رایج برای یک صفحه .htaccess روی سایت شما وجود دارد:

Mod_Rewrite

یکی از مفیدترین جنبه‌های فایل .htaccess، ‏mod_rewrite است. می‌توانید از فایل .htaccess برای تعیین و تغییر نحوه نمایش URLها و صفحات وب سایت‌تان به کاربرانتان استفاده کنید. حداقلِ یک پیکربندی Rewrite شامل RewriteEngine On و یک یا چند خط RewriteRule است. برای اطلاعات بیشتر درباره نحوه انجام این کار، آموزش «راه‌اندازی mod_rewrite» ما را بخوانید.

احراز هویت

برای راه‌اندازی احراز هویت امنیتی با .htaccess، می‌توانید فایل رمز عبوری به نام .htpasswd بسازید تا کاربران را احراز هویت کند. اعمال این تغییر، یک پورتال رمز عبور می‌سازد که از بازدیدکنندگان سایت می‌خواهد در صورت تمایل به دسترسی به بخش‌های مشخصی از صفحه وب، رمز عبوری وارد کنند. هنگام ساخت این فایل، حتماً آن را به دلایل امنیتی در جایی غیر از دایرکتوری وب ذخیره کنید.

برای ساخت فایل، دستور htpasswd را همراه گزینه c- و نام کاربری برای ساخت فایل htpasswd مشخص‌شده اجرا کنید. پس از این کار، درخواستی از شما می‌خواهد رمز عبوری ارائه بدهید. می‌توانید هر تعداد خط لازم را به فایل htpasswd اضافه کنید؛ اما مطمئن شوید هر کاربر خط مخصوص به خودش را می‌گیرد. مثال زیر نحوه ساخت ورودی جدیدی در فایل را — در این مورد برای کاربر sammy — نشان می‌دهد:

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

می‌توانید محتوای این فایل را با اجرای cat /etc/apache2/.htpasswd بررسی کنید؛ که نام کاربری و رمز عبور رمزنگاری‌شده هر رکوردی را که اضافه کرده‌اید خروجی می‌دهد.

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

sudo nano /var/www/your_domain/.htaccess

در نظر داشته باشید که در این مثال، کل ریشه مستندات را بر اساس /var/www/your_domain محدود می‌کنیم؛ اما این را می‌توان در هر دایرکتوری‌ای که می‌خواهید دسترسی‌اش را محدود کنید قرار داد.

وقتی این فایل باز شد، محتوای زیر را اضافه کرده و تغییرات را ذخیره کنید تا استفاده از قابلیت رمز عبور شروع شود:

/var/www/your_domain/.htaccess

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

برای اطلاعات بیشتر، آموزش «راه‌اندازی احراز هویت با رمز عبور در Apache» ما را بخوانید.

صفحات خطای سفارشی

فایل .htaccess به‌طور اضافی به شما اجازه می‌دهد صفحات خطای سفارشی برای سایت‌تان بسازید. برخی از رایج‌ترین خطاها این‌ها هستند:

  • 400 Bad Request
  • 401 Authorization Required
  • 403 Forbidden Page
  • 404 File not Found
  • 500 Internal Error

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

انواع MIME

در مواردی که سایت شما چند فایل اپلیکیشنی دارد که سرورتان برای سرو کردنشان پیکربندی نشده، می‌توانید انواع MIME (افزونه‌های چندمنظوره ایمیل اینترنت) را با کد زیر در فایل .htaccess به سرور Apache خود اضافه کنید:

/var/www/your_domain/.htaccess

AddType audio/mp4a-latm .m4a

حتماً اپلیکیشن و پسوند فایل را با نوع MIMEای که می‌خواهید پشتیبانی شود جایگزین کنید. در این مثال، یک نوع MIME فایل صوتی را تعیین کردیم.

SSI

اینکلودهای سمت سرور (SSI) زمان‌سازِ خوبی روی یک وب‌سایت هستند. یکی از رایج‌ترین کاربردهای SSI، به‌روزرسانی تعداد زیادی صفحه با داده‌ای مشخص بدون نیاز به به‌روزرسانی تک‌تک صفحات است. مثلاً، وقتی می‌خواهید یک نقل‌قول در پایین یک صفحه را تغییر دهید.

برای فعال‌سازی SSI، کد زیر را در فایل .htaccess خود قرار دهید:

/var/www/your_domain/.htaccess

AddType text/html .shtml
AddHandler server-parsed .shtml

این خطوط به .htaccess می‌گویند که فایل‌های .shtml معتبرند؛ و خط دوم به‌طور خاص، سرور را وادار می‌کند همه فایل‌های منتهی به .shtml را برای هرگونه دستور SSI تجزیه (Parse) کند.

با این حال، اگر تعداد زیادی صفحه .html دارید که علاقه‌ای به تغییر نام‌شان با پسوندهای .shtml ندارید، می‌توانید از تاکتیک دیگری برای تجزیه آن‌ها برای دستورات SSI استفاده کنید: ‏XBitHack.

می‌توانید این تاکتیک XBitHack را با افزودن خط زیر به فایل .htaccess استفاده کنید تا Apache همه فایل‌های .html را با دسترسی‌های مناسب برای SSI بررسی کند:

/var/www/your_domain/.htaccess

XBitHack on

برای واجد شرایط کردن یک صفحه برای XBitHack، از دستور chmod برای تغییر دسترسی‌ها استفاده کنید:

chmod +x pagename.html

حالا که با چند کاربرد رایج برای صفحه .htaccess آشنا شدید، در ادامه درباره تأثیر فایل .htaccess روی سرعت و امنیت و نحوه عیب‌یابی خطاهای رایج بیشتر یاد می‌گیرید.

سرعت و امنیت با فایل‌های .htaccess

حتی اگرچه از فایل .htaccess می‌توان برای بهبود یک سایت استفاده کرد، دو چیزی وجود دارد که باید از تأثیرش روی آن‌ها آگاه باشید: سرعت و امنیت.

درباره سرعت، فایل .htaccess ممکن است سرور شما را کند کند؛ اما برای بیشتر سرورها، این احتمالاً تغییری نامحسوس خواهد بود. این موضوع می‌تواند به مکان صفحه مربوط باشد؛ چون فایل .htaccess روی صفحاتِ موجود در دایرکتوری خودش و همه دایرکتوری‌های بعد از آن تأثیر می‌گذارد. این یعنی هر بار که صفحه‌ای بارگذاری می‌شود، سرور دایرکتوری آن — و هر دایرکتوریِ قبل از آن — را اسکن می‌کند تا به بالاترین دایرکتوری یا یک فایل .htaccess برسد. این فرایند تا زمانی که Directive مربوط به AllowOverride اجازه استفاده از فایل‌های .htaccess را بدهد، رخ خواهد داد.

برای امنیت، فایل .htaccess خیلی در دسترس‌تر از پیکربندی استاندارد Apache است و تغییرات به‌صورت زنده و فوری اعمال می‌شوند (بدون نیاز به ری‌استارت سرور). این موضوع به کاربران اجازه تغییر در فایل .htaccess را داده و کنترل زیادی روی خود سرور به آن‌ها می‌دهد. هر Directiveای که در فایل .htaccess قرار بگیرد، همان اثری را دارد که در خود پیکربندی Apache داشت. همچنین مهم است بدانید که Apache عموماً در صورتی که کاربر بتواند خودش به فایل‌های پیکربندی Apache دسترسی داشته باشد، استفاده از .htaccess را توصیه نمی‌کند.

روی سرورهایی که مستقیماً مدیریت می‌کنید، الگوی خوبی این است که قوانین دائمی را در پیکربندی اصلی Apache قرار داده و فایل‌های .htaccess را برای مواردی نگه دارید که مدیرانِ سطح سایت لازم است تنظیمات خودشان را — بدون Reload کردن وب‌سرور — مدیریت کنند.

عیب‌یابی خطاهای رایج .htaccess

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

۱. خطای 500 Internal Server Error بعد از ویرایش .htaccess

اگر بلافاصله بعد از افزودن یا تغییر قوانین .htaccess، ‏خطای 500 Internal Server Error را دیدید، ممکن است Apache در حال رد کردنِ فایل به دلیل سینتکس نامعتبر یا ماژول غیرفعال باشد.

جزئیات را در لاگ خطای Apache بررسی کنید:

sudo tail -n 50 /var/log/apache2/error.log

به‌دنبال پیام‌هایی بگردید که به .htaccess یا RewriteRule یا Directiveهای ناشناخته اشاره دارند.

تأیید کنید که mod_rewrite یا سایر ماژول‌های ارجاع‌شده با sudo a2enmod rewrite و سپس sudo systemctl reload apache2 فعال شده‌اند.

اگر مطمئن نیستید کدام خط مشکل را ایجاد کرده، به‌طور موقت قوانین جدید را کامنت کرده و یکی‌یکی دوباره اضافه کنید.

۲. کاملاً نادیده گرفته‌شدن قوانین .htaccess

اگر به نظر می‌رسد تغییرات .htaccess شما نادیده گرفته می‌شوند، رایج‌ترین دلیل این است که AllowOverride طوری تنظیم نشده که Directiveهایی را که استفاده می‌کنید مجاز بداند.

تأیید کنید که بلوک <Directory> مربوط به سایت شما شامل AllowOverride All یا مقداری است که محدوده Override درست را در بر می‌گیرد.

مطمئن شوید فایل .htaccess در دایرکتوری‌ای است که Apache از آن سرو می‌کند. برای نصب‌های مبتنی بر اوبونتو از Apache با Virtual Hostهای مبتنی بر نام، این معمولاً /var/www/your_domain است.

دسترسی‌های فایل را بررسی کنید تا مطمئن شوید Apache می‌تواند فایل را بخواند؛ مثلاً با sudo ls -l /var/www/your_domain/.htaccess.

۳. حلقه‌های ریدایرکت و رفتار Rewrite غیرمنتظره

قوانین Rewrite پیچیده می‌توانند به‌راحتی باعث حلقه‌های ریدایرکت یا کدهای وضعیت غیرمنتظره شوند؛ اگر شرایط تست آن‌طور که انتظار می‌رود مطابقت نکند.

قبل از حرکت به RewriteRule، با Directiveهای ساده Redirect شروع کنید؛ اگر فقط به ریدایرکت‌های مسیر یا میزبان پایه نیاز دارید.

وقتی از mod_rewrite استفاده می‌کنید، با یک قانون منفرد شروع کرده و رفتارش را در یک محیط محدود، قبل از اعمال روی کل سایت، تست کنید.

از اینسپکتور شبکه مرورگر خود یا ابزارهایی مثل curl -I برای دیدن کدهای پاسخ و هدرهای Location هنگام دیباگ زنجیره‌های ریدایرکت استفاده کنید.

سوالات متداول

۱. فایل .htaccess برای چه استفاده می‌شود؟

فایل .htaccess یک فایل پیکربندیِ به تفکیک دایرکتوری است که Apache در هر درخواست می‌خواند تا رفتار آن دایرکتوری و زیردایرکتوری‌هایش را تنظیم کند. می‌توانید از آن برای وظایفی مانند Rewrite کردن URLها، ریدایرکت‌ها، کنترل دسترسی، احراز هویت و صفحات خطای سفارشی استفاده کنید؛ وقتی که نمی‌خواهید یا نمی‌توانید فایل‌های پیکربندی اصلی Apache را ویرایش کنید.

۲. فایل .htaccess کجا قرار دارد؟

Apache به‌دنبال .htaccess در هر دایرکتوری‌ای می‌گردد که توسط یک بلوک <Directory> یا <Location> با AllowOverride فعال پوشش داده شده باشد. روی سرورهای Apache مبتنی بر اوبونتو که با Virtual Hostهای مبتنی بر نام پیکربندی شده‌اند، معمولاً فایل را در ریشه مستندات — مانند /var/www/your_domain — قرار می‌دهید. روی هاست اشتراکی، فایل معمولاً در دایرکتوری public_html سایت شما قرار دارد.

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

اگر فایل .htaccess شما به نظر هیچ اثری ندارد، اغلب به این دلیل است که AllowOverride برای آن دایرکتوری روی None تنظیم شده؛ یا چون فایل در دایرکتوری‌ای نیست که Apache واقعاً از آن سرو می‌کند. مسیر <Directory> را در پیکربندی Virtual Host خود تأیید کنید، بررسی کنید که AllowOverride مجاز بودن Directiveهایی را که استفاده می‌کنید را بپذیرد و مطمئن شوید فایل برای کاربر وب‌سرور قابل خواندن است. بازبینی لاگ خطای Apache هم می‌تواند به شناسایی مشکلات سینتکس کمک کند.

۴. آیا .htaccess روی کارایی تأثیر می‌گذارد؟

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

۵. آیا می‌توانم بدون Apache از .htaccess استفاده کنم؟

مکانیزم .htaccess مختص Apache HTTP Server است و توسط وب‌سرورهای دیگری مانند Nginx یا Caddy پردازش نمی‌شود. آن سرورها فرمت‌های پیکربندی خودشان را برای قوانینِ به تفکیک سایت یا مکان دارند. اگر سایتی را از Apache به وب‌سرور دیگری مهاجرت بدهید، لازم است Directiveهای مرتبط .htaccess را به پیکربندی بومی آن سرور ترجمه کنید.

جمع‌بندی

فایل .htaccess به شما انعطاف زیادی برای ساخت و گسترش سایت‌تان می‌دهد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا