
مقدمه
فایل .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 مدرن از Require بهجای Allow یا Deny استفاده میکند: دایرکتیوهای قدیمیتر Allow from و Deny from در Apache 2.4 با سینتکس Require جایگزین شدهاند؛ پس پیکربندیهای جدید باید به Require all granted و دایرکتیوهای مرتبط تکیه کنند.
- وقتی میتوانید، کانفیگ اصلی را ترجیح بدهید: روی سرورهایی که کنترل میکنید، Apache توصیه میکند قوانین دائمی را در فایلهای پیکربندی اصلی قرار دهید تا کارایی بهتر و دیباگ سادهتر شود؛ و
.htaccessرا فقط وقتی استفاده کنید که Override در سطح کاربر لازم است.
پیشنیازها
اگر میخواهید با دنبال کردن مثالهای این آموزش، استفاده از فایل .htaccess را تمرین کنید، به این موارد نیاز دارید:
- یک سرور اوبونتو راهاندازیشده با کاربر غیر root با دسترسی sudo و فایروال فعال. این کار را با دنبال کردن راهنمای راهاندازی اولیه سرور اوبونتو در پارمین کلود میتوانید انجام دهید.
- وبسرور Apache نصبشده روی سرور اوبونتوی شما. نحوه راهاندازیش را با آموزش «نحوه نصب وبسرور Apache روی اوبونتو» در پارمین کلود یاد بگیرید. مطمئن شوید گام ۵ را کامل کرده و فایل هاست مجازی برای دامنهتان دارید. این آموزش در سراسر متن از your_domain بهعنوان مثال استفاده و
/etc/apache2/sites-available/your_domain.confرا بهعنوان فایل هاست مجازی به کار میبرد. - اگر میخواهید با یک دامنه تمرین کنید (اختیاری)، میتوانید با خرید نام دامنه از Namecheap یا استفاده از ثبتکننده دامنه مورد انتخابتان، یکی راه بیندازید. همچنین به هر دوی رکوردهای DNS زیر برای سرورتان نیاز دارید: دو رکورد A، یکی با your_domain و یکی با www.your_domain که به آدرس IP عمومی سرورتان اشاره کنند. برای جزئیات نحوه افزودن آنها، مقدمه DNS پارمین کلود را دنبال کنید.
- اگر مایلید هاست مجازیتان را امن کنید، میتوانید با گواهی مورد اعتماد رایگانی مثل راهنمای Let’s Encrypt برای Apache در پارمین کلود این کار را بکنید. اما اگر دامنه ندارید، میتوانید بهجایش از گواهی Self-Signed استفاده کنید. این همان نوع رمزنگاری را فراهم میکند؛ اما بدون اعتبارسنجی دامنه. برای راهاندازی، راهنمای گواهی SSL خود-امضا برای Apache در پارمین کلود را دنبال کنید.
وقتی راهاندازی را تمام کردید، میتوانید در مراحل بعدی فعالسازی و ساخت فایل .htaccess را تمرین کنید.
فعال کردن فایل htaccess.
اگر به تنظیمات سرور دسترسی دارید، میتوانید پیکربندی Apache را ویرایش کنید تا اجازه دهد فایل .htaccess بر پیکربندیهای استاندارد وبسایت Override کند.
با باز کردن فایل هاست مجازی 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 را فعال میکند. دایرکتیوهای قدیمی 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» در پارمین کلود یاد بگیرید.
احراز هویت (Authentication)
برای راهاندازی احراز هویت امنیتی با .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
در مواردی که سایتتان شامل برخی فایلهای اپلیکیشنی است که سرورتان برای تحویلشان راهاندازی نشده، میتوانید انواع Multipurpose Internet Mail Extensions (MIME) را به سرور Apache خود در فایل .htaccess با کد زیر اضافه کنید:
/var/www/your_domain/.htaccess
AddType audio/mp4a-latm .m4a
حتماً اپلیکیشن و پسوند فایل را با نوع MIMEای که میخواهید پشتیبانی کنید جایگزین کنید. در این مثال، نوع MIME فایل صوتی را مشخص کردیم.
SSI
Server Side Includes (SSI) صرفهجویی زمانی بزرگی روی وبسایت است. یکی از رایجترین کاربردهای SSI، بهروزرسانی تعداد زیادی صفحه با دادههای خاص بدون نیاز به بهروزرسانی تکتک صفحات است. مثلاً، اگر میخواهید نقلقولی در پایین صفحهای را تغییر دهید.
برای فعال کردن SSI، کد زیر را در فایل .htaccess خود درج کنید:
/var/www/your_domain/.htaccess
AddType text/html .shtml
AddHandler server-parsed .shtml
این خطوط به .htaccess میگویند که فایلهای .shtml معتبرند؛ با خط دوم بهطور خاص سرور را وادار به پارس کردن همه فایلهای منتهی به .shtml برای هر گونه دستور SSI میکند.
اما اگر صفحات .html زیادی دارید که مایل نیستید با پسوندهای .shtml تغییر نام دهید، میتوانید از تاکتیک دیگری برای پارسشان برای دستورات SSI استفاده کنید: XBitHack.
میتوانید از این تاکتیک XBitHack با افزودن خط زیر به فایل .htaccess استفاده کنید تا Apache همه فایلهای .html را با مجوزهای مناسب برای SSI چک کند:
/var/www/your_domain/.htaccess
XBitHack on
برای eligible کردن صفحهای برای XBitHack، از دستور chmod برای تغییر مجوزها استفاده کنید:
chmod +x pagename.html
حالا که درکی از چند کاربرد رایج صفحه .htaccess دارید، در ادامه درباره تأثیر فایل .htaccess بر سرعت و امنیت و نحوه عیبیابی خطاهای رایج بیشتر یاد میگیرید.
سرعت و امنیت با فایلهای htaccess.
هرچند فایل .htaccess را میتوان برای بهبود سایت استفاده کرد، دو چیزی هست که باید از تأثیرگذاریشان روی آن آگاه باشید: سرعت و امنیت.
درباره سرعت، فایل .htaccess ممکن است سرورتان را کند کند؛ اما برای بیشتر سرورها، این احتمالاً تغییری نامحسوس خواهد بود. این میتواند بهدلیل مکان صفحه باشد؛ چون فایل .htaccess بر صفحات در دایرکتوریاش و همه دایرکتوریهای بعد از آن اثر میگذارد. یعنی هر بار که صفحهای بارگذاری میشود، سرور دایرکتوریاش و هر دایرکتوری قبل از آن را تا وقتی به بالاترین دایرکتوری یا فایل .htaccess برسد اسکن میکند. این فرایند تا زمانی رخ میدهد که دایرکتیو AllowOverride اجازه استفاده از فایلهای .htaccess بدهد.
برای امنیت، فایل .htaccess بسیار قابلدسترستر از پیکربندی استاندارد Apache است و تغییرات فوراً زنده میشوند (بدون نیاز به ریاستارت سرور). این به کاربران اجازه میدهد در فایل .htaccess تغییراتی بدهند؛ که کنترل زیادی روی خود سرور به آنها میدهد. هر دایرکتیوی که در فایل .htaccess قرار بگیرد، همان اثری را دارد که در خود پیکربندی Apache داشت. همچنین مهم است توجه کنید که Apache عموماً استفاده از .htaccess را منع میکند اگر کاربر بتواند خودش به فایلهای پیکربندی Apache دسترسی داشته باشد.
روی سرورهایی که مستقیماً مدیریت میکنید، الگوی خوبی این است که قوانین دائمی را در پیکربندی اصلی Apache قرار دهید و فایلهای .htaccess را برای مواردی نگه دارید که مدیران سطح-سایت لازم است تنظیمات خودشان را بدون ریلود کردن وبسرور مدیریت کنند.
عیبیابی خطاهای رایج 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 یا دایرکتیوهای ناشناخته ارجاع میدهند.
تأیید کنید که mod_rewrite یا سایر ماژولهای ارجاعشده فعالاند با sudo a2enmod rewrite و بهدنبالش sudo systemctl reload apache2.
اگر مطمئن نیستید کدام خط مشکل را ایجاد کرده، موقتاً قوانین جدید را کامنت و یکییکی دوباره اضافه کنید.
۲. قوانین htaccess. کاملاً نادیده گرفته میشوند
اگر تغییرات .htaccess شما نادیده گرفته به نظر میرسند، رایجترین دلیل این است که AllowOverride طوری تنظیم نشده که دایرکتیوهایی را که استفاده میکنید مجاز بداند.
تأیید کنید که بلاک <Directory> سایتتان شامل AllowOverride All یا مقداری است که محدوده Override درست را بگنجاند.
مطمئن شوید فایل .htaccess در دایرکتوریای است که Apache از آن سرو میکند. برای نصبهای مبتنی بر اوبونتوی Apache با هاستهای مجازی مبتنی بر نام، این معمولاً /var/www/your_domain است.
مجوزهای فایل را چک کنید تا مطمئن شوید Apache میتواند فایل را بخواند؛ مثلاً با sudo ls -l /var/www/your_domain/.htaccess.
۳. حلقههای ریدایرکت و رفتار rewrite غیرمنتظره
قوانین rewrite پیچیده بهراحتی میتوانند حلقههای ریدایرکت یا کدهای وضعیت غیرمنتظره ایجاد کنند اگر شرایط تست طبق انتظار تطبیق نیابند.
قبل از رفتن به RewriteRule، با دایرکتیوهای Redirect ساده شروع کنید اگر فقط به ریدایرکتهای پایه مسیر یا هاست نیاز دارید.
وقتی mod_rewrite را استفاده میکنید، با قانون منفردی شروع کنید و رفتارش را در محیط محدودی تست کنید قبل از اعمال روی کل سایت.
از بازرس شبکه مرورگرتان یا ابزارهایی مثل curl -I برای دیدن کدهای پاسخ و هدرهای Location هنگام دیباگ زنجیرههای ریدایرکت استفاده کنید.
سوالات متداول
۱. فایل htaccess. برای چیست؟
فایل .htaccess فایل پیکربندی به-ازای-دایرکتوری است که Apache در هر درخواست میخواند تا رفتار آن دایرکتوری و زیردایرکتوریهایش را تنظیم کند. میتوانید از آن برای وظایفی مثل بازنویسی URL، ریدایرکتها، کنترل دسترسی، احراز هویت و صفحات خطای سفارشی استفاده کنید—وقتی که نمیخواهید یا نمیتوانید فایلهای پیکربندی اصلی Apache را ویرایش کنید.
۲. فایل htaccess. کجا قرار دارد؟
Apache به دنبال .htaccess در هر دایرکتوریای میگردد که با بلاک <Directory> یا <Location> با AllowOverride فعال پوشش داده شده. روی سرورهای مبتنی بر اوبونتوی Apache که با هاستهای مجازی مبتنی بر نام پیکربندی شدهاند، معمولاً فایل را در ریشه سند مثل /var/www/your_domain قرار میدهید. روی هاست اشتراکی، فایل معمولاً در دایرکتوری public_html سایت شما قرار دارد.
۳. چرا فایل htaccess. من کار نمیکند؟
اگر فایل .htaccess شما به نظر نمیرسد هیچ اثری داشته باشد، اغلب به این دلیل است که AllowOverride برای آن دایرکتوری روی None تنظیم شده؛ یا چون فایل در دایرکتوریای نیست که Apache واقعاً از آن سرو میکند. مسیر <Directory> را در پیکربندی هاست مجازیتان تأیید، چک کنید که AllowOverride دایرکتیوهایی را که استفاده میکنید مجاز میداند و تأیید کنید فایل برای کاربر وبسرور قابل خواندن است. مرور لاگ خطای Apache هم میتواند کمک کند مسائل سینتکس را ببینید.
۴. آیا htaccess. بر کارایی اثر میگذارد؟
بله، .htaccess میتواند بر کارایی اثر بگذارد؛ چون Apache وقتی AllowOverride فعال است، باید در هر درخواست در هر دایرکتوری در طول مسیر به دنبال فایلهای .htaccess چک کند. روی بیشتر سایتها این سربار کوچک است؛ اما روی سرورهای پرترافیک یا ساختارهای دایرکتوری پیچیده، بررسیهای فایلسیستم اضافی میتوانند جمع شوند. وقتی پیکربندی سرور را کنترل میکنید، Apache توصیه میکند قوانین دائمی را به پیکربندی اصلی منتقل کنید تا از این هزینه اجتناب شود.
۵. آیا میتوانم از htaccess. بدون Apache استفاده کنم؟
سازوکار .htaccess مخصوص Apache HTTP Server است و توسط وبسرورهای دیگر مثل Nginx یا Caddy پردازش نمیشود. آن سرورها قالبهای پیکربندی خودشان را برای قوانین خاص-سایت یا خاص-مکان دارند. اگر سایتی را از Apache به وبسرور دیگری مهاجرت میکنید، باید دایرکتیوهای مرتبط .htaccess را به پیکربندی نیتیو آن سرور ترجمه کنید.
نتیجهگیری
فایل .htaccess به شما انعطاف زیادی برای ساخت سایتتان میدهد.




