فایل htaccess چیست؟ نحوه ساخت + کاربردهای فایل htaccess

فایل htaccess چیست؟

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

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

فایل htaccess چیست؟

فایل htaccess یک فایل متنی است و از نوع distributed configuration files (فایل های پیکربندی توزیع شده) است روشی است برای انجام تغییرات در تنظیمات وب سرور آپاچی بر اساس دایرکتوری ها. درون فایل htaccess تنظیمات به صورت دستورات متنی قرار می گیرد. تنظیمات داخل فایل htaccess بر روی دایرکتوری که این فایل در آن قرار گرفته و تمام زیرشاخه ها و پوشه های داخلی تر اعمال خواهد شد.

برای مثال اگر فایلhtaccess در روت هاست قرار بگیرد تنظیمات آن بر روی کل سایت اعمال خواهد شد و اگر این فایل درون پوشه ای با نام download قرار بگیرد، تنظیمات آن تنها بر روی پوشه download و دایرکتوری های داخلی آن اعمال خواهد شد.

 نکته: می توانیم بیش از ۱ فایل اچ تی اکسز داشته باشیم. به ازای هر دایکتوری می توانید یک فایل htaccess بسازیم.

در لینوکس هرگاه علامت نقطه (.) در ابتدای نام یک فایل قرار بگیرد آن را مخفی می کند. بنابراین فایل htaccess نیز یک فایل مخفی است و ممکن است وجود داشته باشد ولی از دید شما پنهان باشد.

مزیت استفاده از فایل htaccess چیست؟

مهمترین مزیت استفاده از فایل htaccess در هاست های اشتراکی است، جایی که ممکن است به فایل های پیکربندی اصلی مثل php.ini دسترسی نداشته باشید. در این صورت به کمک این فایل می توانید تنظیمات مورد نظرتان را انجام دهید.

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

همانطور که گفتیم درون هر پوشه و دایرکتوری از سایت می تواند یک فایل htaccess قرار دهیم! درون فایل htaccess اصلی وب سایت در دایرکتوری Root سایت ( public_html یا www یا html ) قرار دارد. از آن جایی که این فایل به دلیل قرار گرفتن علامت نقطه در ابتدای نام آن، به صورت پیشفرض مخفی است، ممکن است برای دیدن آن لازم باشد تا تنظیماتی را انجام دهید.

نحوه پیدا کردن فایل htaccess:

برای دسترسی و پیدا کردن فایل htaccess کارهای زیر را انجام دهید:

  • وارد هاست خود و دایرکتوری روت شوید.
  • نمایش فایل های مخفی Hidden Files را فعال کنید .
  • فایل htaccess را خواهید دید.
  • اگر آن را نیافتید یعنی وجود ندارد پس می توانید آن را ایجاد کنید.

مشاهده فایل htaccess در کنترل پنل CPanel

نمایش فایل های مخفی در سی پنل

برای مشاهده فایل htaccess در کنترل پنل CPanel از روش زیر اقدام نمائید:

  • ابتدا بر روی دکمه Setting کلیک کنید.
  • سپس از پنجره مُدال باز شده، تیک گزینه Show Hidden Files (dotfiles) را بزنید.
  • با این کار اگر فایل .htaccess وجود داشته باشد از حالت مخفی بودن خارج شده و نمایان می شود.

بیشتر بدانید : cpanel چیست

فایل htaccess در پنل سی پنل

اگر پس از انجام تنظیمات بالا این فایل را ندیدید، می توانید آن را ایجاد کنید.

مشاهده فایل htaccess در کنترل پنل Direct Admin

مشاهده فایل htaccess در کنترل پنل Direct Admin

نحوه ساخت فایل htaccess

کافیست یک فایل متنی یا text در دایرکتوری روت یا دایرکتوری مورد نظرتان ایجاد کنید و نام آن را .htaccess قرار دهید.

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

فایل htaccess شامل چه مواردی می شود؟ به کمک htaccess کارهای مختلفی می توان انجام داد که در ادامه آن ها را بیان می کنیم:

ایجاد ریدایرکت

به کمک htaccess می توانیم لینک ها و URL های سایت را به لینک های دیگر ریدایرکت کنیم. این ریدایرکت می تواند از نوع دائمی یا ۳۰۱ و موقتی و ۳۰۲ باشد.

<IfModule mod_alias.c>
  # ریدایرکت به آدرسی در هاست دیگر
  Redirect "/service" "http://foo2.example.com/service"

  # ریدایرکت لینکی از سایت به لینک جدید
  Redirect "/one" "/two"

  # ریدایرکت موقتی (معادل دستور بالا)
  Redirect temp "/one" "/two"

  # ریدایرکت دائمی لینک سایت به آدرس جدید
  Redirect permanent "/three" "/four"

  # ریدایرکت به لینک خارجی به کمک عبارت قاعده مند
  # Using regular expressions and RedirectMatch
  RedirectMatch "^/oldfile\.html/?$" "http://example.com/newfile.php"
</IfModule>

اجباری کردن https

مجموعه Rewrite rules های زیر نسخه ناامن http:// را به نسخه امن آن یعنی https:// ریدایرکت می کند.

<IfModule mod_rewrite.c>
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>

ایجاد صفحه خطای سفارشی ( مثل صفحه ۴۰۴ سفارشی)

به کمک htaccess می توانید برای خطاهای پیشفرض وب سرور مثل خطای ۴۰۴ یا خطای ۵۰۰ که به کاربر نمایش داده می شوند، لینک صفحه سفارشی را مشخص کنید.

مثلا فرض کنید برای خطای ۴۰۴ یک صفحه ۴۰۴.html زیبا طراحی کرده اید همینطور برای خطای ۵۰۰. با قرار دادن دستور زیر در فایل .htaccess این صفحه ها به وب سرور آپاچی معرفی می شود:

ErrorDocument 404 /errors/400.html
ErrorDocument 500 /errors/500.html
ErrorDocument 401 https://example.com/login.html
ErrorDocument 403 "Sorry, can't allow you access today"

در خط آخر برای خطای ۴۰۳ یک متن سفارشی به کاربر نمایش می دهیم.

تعیین Charset پیشفرض محتوای صفحه

تمام محتوای وب دارای Character Set هستند و بیشتر آن ها از نوع UTF-8 Unicode اند. به کمک دستور AddDefaultCharset می توانیم در htaccess برای همه فایل های text/html و text/plain نوع charset را utf-8 کنیم:

<IfModule mod_mime.c>
  AddDefaultCharset utf-8
</IfModule>

محافظت از دایرکتوری ها و Password-Protected کردن آن ها

به کمک htaccess می توانیم برای دایرکتوری ها و پوشه های مهم پسورد ست کنیم.

 غیر فعال کردن Directory Browsing

قابلیت Directory Browsing این امکان را به کاربران می دهد تا با وارد شدن به داخل دایرکتوری ها، همه محتویات آن را ببینند. درست مانند حالتی که در سیستم عاملتان وارد یک درایو یا پوشه می شوید و می توانید محتوا آن را ببینید.

فعال بودن Directory Browsing می تواند یک ریسک امنیتی باشد. هرچند فعال بودن آن در هاست های دانلود می تواند یک مزیت باشد ولی برای هاست هایی که نسخه اصلی وب سایت در آن وجود دارد کار درستی نیست و بهتر است غیر فعال شود. برای غیر فعال کردن Directory Browsing به کمک htaccess، محتوای زیر را درون آن قرار دهید:

<IfModule mod_autoindex.c>
    Options -Indexes
</IfModule>

روش دیگر برای جلوگیری از دیده شدن محتوای درون دایرکتوری ها، ایجاد فایل index.html یا index.php خالی داخل آن هاست.

مسدود کردن IP ها و کشور ها

شما می توانید به کمک فایل htaccess مانع دسترسی کاربران با IP های خاص به وب سایتتان شوید. دلایل مختلفی برای انجام این کار وجود دارد برای مثل برای جلوگیری از حملات DDOS یا DOS و یا مسدود کردن دسترسی یک کاربر که در تلاش از تا تست های مخربی را بر روی سایت شما انجام دهد. همچنین برای تحریم کردن/مجاز کردن دسترسی کاربران یک کشور خاص به وب سایتتان نیز می توانید از این روش استفاده کنید:

# بلاک کردن یک آدرس آی پی
deny from 10.10.10.10

# بلاک کردن چندین آدرس آی پی
deny from 10.10.10.10 20.20.20.20 99.99.99.99

#بلاک کردن یک رنج آدرس آی پی یا سابنت
Deny from 123.123

allow from all

فعال کردن کش مرورگر یا Browser Caching به کمک htaccess

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

تعیین زمان اعتبار کش برای انواع مختلف فایل ها ExpiresByType همراه با Cache-Contorl

  <IfModule mod_expires.c>

  ExpiresActive on
  ExpiresDefault                                    "access plus 1 month"
  
  # DATA
  ExpiresByType text/html                           "access plus 0 seconds"
  ExpiresByType text/xml                            "access plus 0 seconds"
  # SCRIPTS
  ExpiresByType text/css                            "access plus 1 month" 
  ExpiresByType text/javascript                     "access plus 1 month" 
  ExpiresByType application/javascript              "access plus 1 month" 
  ExpiresByType application/x-javascript            "access plus 1 month" 
  # IMAGES
  ExpiresByType image/gif                           "access plus 1 month"
  ExpiresByType image/png                           "access plus 1 month"
  ExpiresByType image/jpe                           "access plus 1 month"
  ExpiresByType image/jpg                           "access plus 1 month"
  ExpiresByType image/jpeg                          "access plus 1 month"
  ExpiresByType image/jp2                           "access plus 1 month"
  # AUDIO
  ExpiresByType audio/ogg                           "access plus 1 month"
  ExpiresByType audio/basic                         "access plus 1 month"
  ExpiresByType audio/mpeg                          "access plus 1 month"
  # VIDEO
  ExpiresByType video/ogg                           "access plus 1 month"
  ExpiresByType video/mp4                           "access plus 1 month"
  ExpiresByType video/webm                          "access plus 1 month"
  # FONTS
  ExpiresByType font/truetype                       "access plus 1 month"
  ExpiresByType font/opentype                       "access plus 1 month"
  ExpiresByType application/font-woff               "access plus 1 month"
  ExpiresByType application/font-woff2              "access plus 1 month"
  
    <IfModule mod_headers.c>
    Header append Cache-Control "public"
    <FilesMatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$">
      Header set Cache-Control "max-age=2678400, public"
    </FilesMatch>
    <FilesMatch "\.(html|htm)$">
      Header set Cache-Control "max-age=7200, private, must-revalidate"
    </FilesMatch>
    <FilesMatch "\.(pdf)$">
      Header set Cache-Control "max-age=86400, public"
    </FilesMatch>
    <FilesMatch "\.(js)$">
      Header set Cache-Control "max-age=2678400, private"
    </FilesMatch>
  </IfModule>

</IfModule>

فعال کردن Gzip

با کمک Gzip می توان فایل های مختلفی مثل css و js و html و سایر فایل های متنی را به صورت Lossless کم حجم و فشرده سازی کرد. در روش Lossless محتوا کم حجم و فشرده می شود بدون اینکه به اصل محتوا آسیبی وارد شود. این کار تاثیر مثبت زیادی در بهبود سرعت بارگزاری سایت شما برای کاربرانتان دارد.

دستورات htaccess برای فعال کردن Gzip

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

جلوگیری از برخی حملات XSS به کمک htaccess

پس از حملات SQL injection که رایجترین نوع حمله برای هک وب سایت ها است، حملات XSS نیز روش دیگری برای نفوذ به وب سایت ها و هک کردن آن هاست. با اضافه کردن دستورات زیر به htaccess می توانید از بروز برخی از این حملات XSS جلوگیری کنید.

# Blocks some XSS attacks
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F,L]
</IfModule>

افزایش حجم آپلود و حافظه به کمک htaccess

یکی دیگر از کارهایی که به کمک فایل htaccess می توان انجام داد تنظیمات مربوط به resource ها است. به اینصورت که می توانیم میزان حجم آپلود فایل ها، مدت زمان انتظار برای پردازش اسکریپت ها و حداکثر حافظه مصرفی مجاز برای اجرای اسکریپت ها را تعیین کنیم:

php_value upload_max_filesize 256M
php_value post_max_size 256M
php_value max_execution_time 300
php_value max_input_time 300

اهمیت فایل htaccess

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

با توجه موارد ذکر شده فایل htaccess و محتویات آن بسیار حائر اهمیت است و نباید بدون اطلاعات کافی اقدام به حذف یا اضافه کردن دستورات آن کرد. چرا که ممکن است باعث از بین رفتن تمامی زحمات سئو شما و یا زیر سوال رفتن امنیت وب سایت شما شود.

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

آیا فایل htaccess فقط در وب سرور آپاچی کار می کند؟

خیر، وب سرور Litespeed نیز از آن پشتیبانی می کند ولی سرور nginx از دستورات htaccess پشتیبانی نمی کند.

اگر سایت فایل htaccess نداشته باشد چه می شود؟

داشتن یا نداشتن فایل htaccess به خودی خود چیز خوب یا بدی نیست. استفاده از آن بستگی به نوع وب سرور و همچنین سایر تنظیمات و تمهیدات به کارگرفته شده در وب سرور و وب سایت مورد نظر دارد.

آیا فایل htaccess در سرعت سرور موثر است؟

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

منابع کمکی:

منبع ۱

منبع ۲

به این مطلب چه امتیازی می دهید؟
ایمان شادمهری
ایمان شادمهری
هر روز آموزش ببین و روزی یک ساعت چیز یاد بگیر. در پایان سال 365 ساعت آموزش دیدی!