تعریف: .htaccess یا Hypertext access یک فایل پیکربندی سطح دایرکتوری است که توسط وب سرور های متعددی پشتیبانی می شود، که امکان تنظیم غیر متمرکز برای مدیریت پیکربندی های سرور را فراهم می آورد. این فایل در داخل شاخه های وب قرار گرفته و امکان تنظیم مجدد زیر مجموعه ای از تنظیمات کلی دایرکتوری هایی که در داخل آن قرار دارد و دایرکتوری های زیر مجموعه را فراهم می آورد.
هدف اصلی .htaccess همانطور که از نام پیداست، امکان کنترل سطح دسترسی هر دایرکتوری به صورت مجزاست، به عنوان مثال نیاز به پسورد برای دستیابی به یک سری از داده ها. امروزه .htaccess به غیر از موارد نامبرده قابلیت بازنویسی تنظیمات دیگری نظیر نوع محتوا و کاراکتر، هندلر های CGI و ... را دارد.
* منبع: ویکی پدیا انگلیسی

اکنون هدف از نگارش این پست، ارائه راهنمایی هایی برای برنامه نویسان تازه کاری است که به هر نحو نیاز به تغییر و تفسیر این فایل پیکربندی را دارند. در ادامه مهم ترین و کاربردی ترین دستورات به صورت یک به یک توضیح داده می شود:
1- در نظر گرفتن صفحه پیشفرض در دایرکتوری:
DirectoryIndex index.html index.php index.htm
سیستم به صورت اتوماتیک هر کدام از فایل های موجود از بین لیست را به عنوان صفحه پیشفرض معرفی می کند. اولویت بر اساس تعریف است.

2- ایجاد ارور شخصی سازی شده:
ErrorDocument 404 errors/404.html
هنگامی که وب سرور با خطا های گوناگونی برخورد کرد، در این مثال 404، شما می توانید صفحه را به یک آدرس از پیش تعریف شده نظیر گزینه بالا منتقل کنید، همینطور طبق کد پایین امکان ایجاد وضعیت داینامیک را نیز برای اررور های گوناگون در اختیار خواهید داشت:
ErrorDocument 404 /cgi-bin/error/error?404

3- کنترل سطح دسترسی به فایل ها و دایرکتوری:
بیشترین کاربردی که فایل های .htaccess دارند، تنظیم سطح دسترسی به یک دایرکتوری، مسیر یا فایل مشخصی است؛ به عنوان مثال ممکن است دایرکتوری خاصی در صفحه فراخوانی شده باشد، اما شما نخواهید تا کاربران به صورت مستقیم به فایل های داخل آن دسترسی داشته باشند، بنابراین می توانید از دستور زیر در فایل .htaccess درون دایرکتوری استفاده نمائید:
deny from all
شما هم چنین می توانید همین تعریف را بر اساس IP ها نیز تفکیک کنید، به عنوان مثال شما دوست دارید یک رنج از IP قادر به بازدید صفحه باشند، اما سایر IP ها نتوانند به آن دسترسی بیابند که از دستور زیر طبق نیاز استفاده خواهید نمود:
order deny,allow
deny from all
allow from 192.168.0.0/24
کلمه all به همه انواع درخواست ها اشاره دارد و به جای آن می توانید همانطور که گفتیم از IP آدرس ها استفاده نمائید.
گاهی دوست دارید یک IP مشخص را از دسترسی به صفحه منع کنید، مانند روباتی که از قوانین متداول پیروی نمی کند، بنابراین از کدی شبیه به زیر استفاده می کنید:
order allow,deny
deny from 83.222.23.219
allow from all

4- اصلاح متغیر های محلی:
متغیر های محلی شامل اطلاعاتی است که توسط فراخوانی های سمت سرور و CGI مورد استفاده قرار می گیرد. ایجاد (Set) و حذف (Unset) کردن این متغیر ها از دستور SetEnv و دستور UnSetEnv امکان پذیر است. مثال:
SetEnv SITE_WEBMASTER "Hamid Yousefi"
SetEnv SITE_WEBMASTER_URI mailto:mails.Mihanblog@gmail.com
UnSetEnv REMOTE_ADDR

5- ریدایرکت نوع 301 با استفاده از .htaccess:
برای ریدایرکت از یک مستند قدیمی به یک آدرس جدید، از این کد استفاده خواهید نمود:
Redirect 301 /beta/yourpage.html http://mydom.ir/final/hello.html
برای انتقال کامل یک دایرکتوری به یک آدرس جدید نیز می توانید از کد زیر استفاده نمائید:
RedirectMatch 301 /master(.*) http://yourdomain.com/$1

6- پیاده سازی طرح کش:
ایجاد طرح کش (ذخیره سازی موقت) برای افزایش کارایی سیستم است. شما می توانید منابع استاتیک یا هر نوع داده منحصر به فردی را طبق دستورات زیر وارد طرح کش نمائید:

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$">
   Header set Cache-Control "public"
   Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
   Header unset Last-Modified
</FilesMatch>
<FilesMatch "\.(html|htm|xml|txt|xsl)$">
   Header set Cache-Control "max-age=7200, must-revalidate"
</FilesMatch>
<FilesMatch "\.(js|css)$">
   SetOutputFilter DEFLATE
   Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
</FilesMatch>

7- فشرده سازی خروجی با استفاده از GZip:
با اضافه کردن دستورات زیر شما همه منابع js و css و ... خود را با استفاده از فشرده ساز GZip به خروجی خواهید فرستاد:

<IfModule mod_gzip.c>
    mod_gzip_on         Yes
    mod_gzip_dechunk  Yes
    mod_gzip_item_include file      \.(html?|txt|css|js|php|pl)$
    mod_gzip_item_include handler   ^cgi-script$
    mod_gzip_item_include mime      ^text/.*
    mod_gzip_item_include mime      ^application/x-javascript.*
    mod_gzip_item_exclude mime      ^image/.*
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
کد بالا تنها زمانی کارایی خواهد داشت (همانطور که در دستور IfModule مشخص است) که ماژول mod_gzip بر روی وب سرور فعال باشد. در صورتی که وب سرور شما از ماژول mod_deflate پشتیبانی می کند، می توانید از کد زیر استفاده کنید:

<Location>
    SetOutputFilter DEFLATE
      SetEnvIfNoCase Request_URI  \
        \.(?:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI  \
        \.(?:exe|t?gz|zip|gz2|sit|rar)$ no-gzip dont-vary
</Location>
در صورتی که وب سرور شما از mod_deflate هم پشتیبانی نمی کند، از دستورات زیر استفاده کنید:
<FilesMatch "\.(txt|html|htm|php)">
    php_value output_handler ob_gzhandler
</FilesMatch>
در وضعیت عادی، وب سرور ها این دستور را اجرا خواهند نمود.

8- ریدایرکت مرورگر به https:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

9- بازنویسی (ReWrite) آدرس ها (URL) با استفاده از .htaccess
برای دسترسی به آدرس index.php?do=contact از طریق آدرس contact.html می توانید از کد زیر استفاده نمائید:
RewriteEngine on
RewriteRule ^contact\.html$ index.php?do=contact
برای بازنویسی حالاتی نظیر همانند سازی دسترسی products/32.html به index.php?do=products&id=32 دستور زیر می تواند مفید باشد:
RewriteEngine on
RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ product.php?id=$2

10- بازنویسی آدرس های بدون پیشوند www به آدرس های دارای www از همان آدرس:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^Mihanblog\.com$
RewriteRule (.*) http://www.Mihanblog.com/$1 [R=301,L]
بازنویسی آدرس yoursite.com/xyz به index.php?username=xyz
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?username=$1

11- بازنویسی دامنه اصلی به ساب دامنه یا دایرکتوری زیر شاخه public_html:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^Mihanblog\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.Mihanblog\.com$
RewriteCond %{REQUEST_URI} !^/beta/
RewriteRule (.*) /beta/$1

12- کنترل دسترسی به یک فایل:
در اغلب اوقات فایل .htaccess سطوح دسترسی به کل دایرکتوری را تنظیم می کند، اما امکان تعیین سطح دسترسی به یک فایل منحصر به فرد را نیز داریم. می توان برای این کار از کد زیر استفاده نمود:
<Files quiz.html>
   order deny,allow
   deny from all
   AuthType Basic
   AuthName "Characterology Student Authcate"
   AuthLDAP on
   AuthLDAPServer ldap://directory.characterology.com/
   AuthLDAPBase "ou=Student, o=Characterology University, c=au"
   require valid-user
   satisfy any
</Files>
این ها همه آن چیزی نیست که از فایل .htaccess برای باز تنظیم آن می توان استفاده کرد، اما عملا مهم ترین آن ها هست.