خانه هاست و میزبانی وب فایل htaccess چیست؟ فایل htaccess چه کاربردی دارد؟
تاریخ به‌روزرسانی : 1397/07/23
به قلم : شهاب بیرامی
زمان مطالعه : 6 دقیقه

📄 خلاصه سریع (TL;DR)

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

فایل .htaccess چیست؟

فایل .htaccess (مخفف Hypertext Access) یک فایل پیکربندی برای وب‌سرور Apache است که به کاربران اجازه می‌دهد بدون دسترسی به فایل اصلی پیکربندی سرور (httpd.conf)، تنظیمات را در سطح دایرکتوری تغییر دهند.

💡 نکات کلیدی درباره .htaccess

  • نام فایل با نقطه شروع می‌شود (فایل مخفی در لینوکس)
  • در هر دایرکتوری می‌تواند یک فایل .htaccess داشته باشد
  • تغییرات فوری اعمال می‌شوند (نیاز به ریستارت سرور نیست)
  • روی Apache کار می‌کند (نه Nginx)
  • استفاده نادرست می‌تواند سایت را از کار بیندازد

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

فایل .htaccess برای موارد زیر استفاده می‌شود:

🔒

محافظت با رمز

محدود کردن دسترسی به فایل‌ها و پوشه‌ها

🔄

ریدایرکت URL

هدایت کاربران از URL قدیمی به جدید

بهینه‌سازی سرعت

فشرده‌سازی و کش کردن فایل‌ها

🛡️

افزایش امنیت

جلوگیری از دسترسی غیرمجاز

🔗

URL Rewriting

ایجاد URLهای تمیز و SEO-friendly

🚫

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

نمایش صفحات 404 و 500 سفارشی

نحوه ایجاد فایل .htaccess

برای ایجاد فایل .htaccess این مراحل را دنبال کنید:

  1. یک فایل متنی جدید ایجاد کنید
  2. نام آن را .htaccess بگذارید (با نقطه در ابتدا)
  3. کدهای مورد نظر را اضافه کنید
  4. فایل را در دایرکتوری ریشه سایت (public_html) آپلود کنید

⚠️ توجه: قبل از هر تغییری در .htaccess، حتماً یک بکاپ از فایل بگیرید. یک خطای کوچک می‌تواند کل سایت را از کار بیندازد.

کدهای پرکاربرد .htaccess

۱. ریدایرکت HTTP به HTTPS

این کد تمام ترافیک HTTP را به HTTPS هدایت می‌کند (ضروری برای امنیت و SEO):

# Redirect HTTP to HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

۲. ریدایرکت WWW به Non-WWW (یا برعکس)

حذف www:

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

افزودن www:

# Redirect non-www to www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301]

۳. ریدایرکت یک صفحه خاص

# Redirect single page
Redirect 301 /old-page.html /new-page.html

# Redirect to external URL
Redirect 301 /old-page https://example.com/new-page

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

# Custom Error Pages
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
ErrorDocument 403 /errors/403.html

۵. فعال‌سازی فشرده‌سازی GZIP

# Enable GZIP Compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/json
</IfModule>

۶. تنظیم کش مرورگر (Browser Caching)

# Browser Caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>

۷. محافظت با رمز عبور

# Password Protect Directory
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user

۸. محدود کردن دسترسی به IP خاص

# Allow only specific IP
Order deny,allow
Deny from all
Allow from 192.168.1.100

# Block specific IP
Order allow,deny
Allow from all
Deny from 123.456.789.0

۹. جلوگیری از Hotlinking تصاویر

# Prevent Hotlinking
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ – [F,NC,L]

۱۰. افزایش امنیت

# Security Headers
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options "nosniff"
Header set X-Frame-Options "SAMEORIGIN"
Header set Referrer-Policy "strict-origin-when-cross-origin"

# Hide .htaccess file
<Files .htaccess>
Order allow,deny
Deny from all
</Files>

# Hide wp-config.php (WordPress)
<Files wp-config.php>
Order allow,deny
Deny from all
</Files>

ملاحظات عملکردی

⚠️ هشدار عملکرد: استفاده از .htaccess به جای پیکربندی اصلی سرور سرعت را کاهش می‌دهد. Apache باید برای هر درخواست فایل .htaccess را در تمام دایرکتوری‌های والد جستجو کند. اگر به پیکربندی اصلی سرور دسترسی دارید، تنظیمات را در httpd.conf قرار دهید.

نکات امنیتی مهم

نکته امنیتی توضیح
پنهان کردن .htaccess همیشه دسترسی به فایل .htaccess را محدود کنید
رمزگذاری با bcrypt برای .htpasswd از bcrypt استفاده کنید (نه MD5)
غیرفعال کردن لیست دایرکتوری با Options -Indexes لیست فایل‌ها را مخفی کنید
محدود کردن فایل‌های حساس دسترسی به wp-config.php و .env را ببندید

.htaccess پیش‌فرض وردپرس

وردپرس از فایل .htaccess برای URL Rewriting استفاده می‌کند. کد پیش‌فرض:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

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

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

فایل‌هایی که با نقطه شروع می‌شوند در لینوکس مخفی هستند. در File Manager سی‌پنل، گزینه «Show Hidden Files» را فعال کنید. در FTP Client نیز گزینه نمایش فایل‌های مخفی را بررسی کنید.

سایتم بعد از تغییر .htaccess از کار افتاد. چه کنم؟

با FTP یا File Manager وارد هاست شوید و فایل .htaccess را بازیابی یا حذف کنید. اگر بکاپ دارید از آن استفاده کنید. اگر وردپرس است، فایل را حذف کرده و از Settings > Permalinks برای بازسازی استفاده کنید.

آیا .htaccess روی Nginx کار می‌کند؟

خیر، .htaccess فقط برای Apache است. Nginx از فایل پیکربندی متفاوت (nginx.conf) استفاده می‌کند. اگر هاست شما از Nginx استفاده می‌کند، باید کدها را به فرمت Nginx تبدیل کنید یا از پشتیبانی هاست کمک بگیرید.

تفاوت Redirect 301 و 302 چیست؟

301 (Permanent Redirect): ریدایرکت دائمی است و به موتورهای جستجو می‌گوید URL قدیمی را فراموش کنند. 302 (Temporary Redirect): ریدایرکت موقت است و موتورهای جستجو URL قدیمی را حفظ می‌کنند. برای SEO معمولاً 301 توصیه می‌شود.

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

۱) فشرده‌سازی GZIP را فعال کنید (mod_deflate)، ۲) کش مرورگر تنظیم کنید (mod_expires)، ۳) Keep-Alive را فعال کنید، ۴) ETag را غیرفعال کنید. این تنظیمات می‌توانند سرعت بارگذاری را تا ۷۰٪ بهبود دهند.

هاست لینوکس با پشتیبانی کامل

با هاست لینوکس برتینا، تنظیمات .htaccess به راحتی انجام دهید.

جمع‌بندی

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

  • همیشه قبل از تغییر بکاپ بگیرید
  • تغییرات را روی محیط تست امتحان کنید
  • از کدهای معتبر استفاده کنید
  • برای عملکرد بهتر، تنظیمات را در httpd.conf قرار دهید

نظرات

  • رضا

    عالی بود، ممنون از مطالب خوب شما

  • علی

    عالی

  • ابوالفضل ماهرانی

    لذت بردم از آموزش رساتون

  • چت روم

    مرسی از راهنمایی خوبتون