تنظیمات فایل htaccess: آموزش تنظیمات ریدایرکت و امنیت
.htaccess چیست و چگونه کار میکند؟
فایل `.htaccess` (مخفف Hypertext Access) یک فایل پیکربندی قدرتمند برای وبسرورهای آپاچی و لایت اسپید است. این فایل به شما اجازه میدهد تا رفتار سرور را برای یک دایرکتوری خاص و تمام زیرشاخههای آن، بدون نیاز به دسترسی به فایلهای اصلی کانفیگ سرور، تغییر دهید. به زبان ساده، `.htaccess` به شما کنترل دقیقی بر روی نحوه نمایش و دسترسی به محتوای سایتتان میدهد.
این فایل فقط روی وبسرورهایی مانند آپاچی و لایت اسپید کار میکند. اکثر سرویسهای میزبانی وب از این وبسرورها استفاده میکنند. همچنین با خرید سرور مجازی و نصب این وبسرورها، میتوانید از قابلیتهای قدرتمند این فایل بهرهمند شوید.
درک ساختار و مفاهیم کلیدی .htaccess
قبل از اینکه به سراغ دستورات برویم، بهتر است با چند مفهوم پایه آشنا شویم:
- دستورالعملها (Directives): هر خط از کد در فایل `.htaccess` یک دستورالعمل است که به آپاچی میگوید چه کاری انجام دهد (مانند
Redirect 301
). - بلاکها (Blocks): گاهی اوقات دستورالعملها درون یک بلاک قرار میگیرند تا فقط در شرایط خاصی اجرا شوند. معروفترین آنها عبارتند از:
<IfModule module_name.c> ... </IfModule>
: این یک بلاک شرطی بسیار مهم است. کدهای داخل این بلاک فقط زمانی اجرا میشوند که ماژول آپاچی مشخص شده (مثلاmod_rewrite.c
) روی سرور فعال باشد. این کار از بروز خطای 500 در سرورهایی که آن ماژول را ندارند، جلوگیری میکند.<Files "filename"> ... </Files>
: دستورالعملهای داخل این بلاک فقط روی فایل مشخص شده اعمال میشوند.
- ماژول Rewrite (mod_rewrite): این قدرتمندترین ماژول آپاچی برای دستکاری URLهاست. تمام دستوراتی که با
Rewrite
شروع میشوند (مانندRewriteEngine
,RewriteRule
,RewriteCond
) به این ماژول تعلق دارند.
دستورات .htaccess از مبتدی تا پیشرفته
در ادامه، مجموعهای کامل از پرکاربردترین دستورات را به صورت دستهبندی شده بررسی میکنیم.
بخش اول: بازنویسی URL و ریدایرکتها (Redirects & URL Rewriting)
۱. ریدایرکت ۳۰۱ (یک صفحه به صفحه دیگر)
برای انتقال دائمی یک صفحه و اعتبار سئوی آن به آدرس جدید.
Redirect 301 /old-page.html /new-page.html
۲. ریدایرکت کل سایت به دامنه جدید
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^oldsite.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.oldsite.com [NC]
RewriteRule ^(.*)$ https://newsite.com/$1 [L,R=301,NC]
</IfModule>
۳. اجباری کردن HTTPS
تمام ترافیک HTTP را به نسخه امن HTTPS منتقل میکند.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
۴. اجباری کردن www یا non-www
برای یکسانسازی آدرس دامنه.
# Force non-WWW
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.yourdomain.com [NC]
RewriteRule ^(.*)$ http://yourdomain.com/$1 [L,R=301]
</IfModule>
۵. فایل .htaccess پیشفرض وردپرس
این کد معروف، مسئول اصلی ساختار پیوندهای یکتای وردپرس است.
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
بخش دوم: امنیت سرور و سایت
۱. محافظت از فایلهای حساس
جلوگیری از دسترسی مستقیم به فایلهای مهم مانند `wp-config.php` و خود `.htaccess`.
<FilesMatch "^(wp-config\.php|\.htaccess)$">
Require all denied
</FilesMatch>
۲. غیرفعال کردن نمایش لیست فایلها (Directory Listing)
جلوگیری از اینکه دیگران بتوانند لیست فایلهای یک پوشه را در مرورگر ببینند.
Options -Indexes
۳. مسدود کردن دسترسی بر اساس آدرس IP
Require all granted
Require not ip 192.168.1.100
Require not ip 10.0.0.0/24
۴. محافظت در برابر Hotlinking
جلوگیری از اینکه سایتهای دیگر تصاویر شما را مستقیما از سرور شما نمایش دهند و پهنای باند شما را مصرف کنند.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [NC,F,L]
</IfModule>
بخش سوم: بهینهسازی عملکرد و سرعت
برای اجرای این دستورات، خرید vps به شما کنترل کامل میدهد.
۱. فعالسازی کش مرورگر (Leverage Browser Caching)
به مرورگر دستور میدهد فایلهای استاتیک را برای مدتی در حافظه خود ذخیره کند.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresDefault "access plus 2 days"
</IfModule>
۲. فعالسازی فشردهسازی Gzip/Deflate
فایلهای متنی را قبل از ارسال برای کاربر فشرده کرده و حجم آنها را به شدت کاهش میدهد.
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript
</IfModule>
بخش چهارم: تنظیمات سفارشی سرور و PHP
۱. تنظیم صفحات خطای سفارشی
به جای نمایش صفحات خطای پیشفرض و بیروح سرور، کاربران را به صفحات طراحی شده خودتان هدایت کنید.
ErrorDocument 401 /errors/401.html
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
۲. تغییر مقادیر PHP (در صورت اجازه هاستینگ)
میتوانید محدودیتهای PHP مانند حداکثر حجم آپلود را افزایش دهید.
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 300
php_value memory_limit 256M
۳. تنظیم منطقه زمانی سرور
SetEnv TZ Asia/Tehran
۴. اجبار به دانلود فایلها
کاربران را مجبور کنید تا به جای مشاهده فایل در مرورگر، آن را دانلود کنند.
<FilesMatch "\.(pdf|doc|xls)$">
Header set Content-Disposition "attachment"
</FilesMatch>
نکات مهم و هشدارها
- همیشه قبل از ویرایش، یک نسخه پشتیبان تهیه کنید. یک خطای کوچک در فایل `.htaccess` میتواند کل سایت شما را از دسترس خارج کند (خطای 500 Internal Server Error).
- عملکرد را در نظر بگیرید: استفاده بیش از حد از قوانین پیچیده در `.htaccess` میتواند کمی بر عملکرد سرور تاثیر بگذارد. برای سایتهای بسیار پربازدید، بهتر است این قوانین مستقیما در فایل کانفیگ اصلی وبسرور قرار داده شوند.
فهرست تیترها