فایل .htaccess یک فایل پیکربندی برای وبسرور Apache است که به شما اجازه میدهد برخی تنظیمات سرور را در سطح یک دایرکتوری و زیرشاخههای آن اعمال کنید؛ بدون اینکه الزاماً به فایل پیکربندی اصلی Apache دسترسی داشته باشید. Apache از این فایل با عنوان Distributed Configuration File
اگر بخواهیم سادهتر توضیح دهیم، .htaccess مجموعهای از دستورالعملهاست که به وبسرور میگوید با درخواستهای مختلف چه رفتاری داشته باشد. برای مثال میتوان از آن برای ریدایرکت URLها، Rewrite آدرسها، مدیریت صفحات خطا، کنترل برخی دسترسیها و تنظیم بعضی Headerها استفاده کرد.
اهمیت این فایل برای کاربران وردپرس بیشتر است؛ زیرا WordPress در محیط Apache میتواند از .htaccess برای مدیریت Rewrite Rules و Pretty Permalinks استفاده کند. به همین دلیل خراب شدن یا حذف اشتباه این فایل گاهی باعث 404 شدن URLهای وردپرس یا حتی خطای 500 میشود.
در این راهنما علاوه بر تعریف .htaccess، محل فایل، روش ساخت و ویرایش، کاربردهای مهم، Redirect و Rewrite، ارتباط آن با سئو و وردپرس، تفاوت آن با Nginx و روش عیبیابی خطاهای رایج را بررسی میکنیم.
مستندات رسمی Apache نیز .htaccess را روشی برای اعمال تنظیمات در سطح دایرکتوری بدون تغییر مستقیم تنظیمات اصلی سرور معرفی میکند.

فایل .htaccess دقیقاً چیست؟
.htaccess یک فایل متنی پیکربندی است که در وبسرور Apache میتواند برای یک دایرکتوری مشخص و زیرشاخههای آن دستورالعمل تعریف کند.
نکته مهم این است که .htaccess جزئی از PHP یا WordPress نیست. این فایل در سطح وبسرور پردازش میشود و WordPress فقط در بعضی شرایط از قابلیتهای آن، بهخصوص برای Rewrite و Permalink، استفاده میکند.
برای نمونه، میتوان در آن مشخص کرد که:
- یک URL قدیمی با کد 301 به URL جدید منتقل شود.
- یک آدرس خوانا در پشت صحنه به فایل یا مسیر دیگری Rewrite شود.
- برای خطای 404 یک صفحه اختصاصی نمایش داده شود.
- برخی دسترسیها محدود شوند.
- برخی Headerهای HTTP تنظیم شوند.
- در صورت فعال بودن ماژولهای لازم، بعضی تنظیمات Cache یا Compression اعمال شوند.
البته همه این دستورات در هر سروری قابل استفاده نیستند و اجرای آنها به نسخه Apache، ماژولهای فعال و تنظیمات AllowOverride یا AllowOverrideList بستگی دارد.
چرا نام فایل .htaccess با نقطه شروع میشود؟
نام استاندارد فایل به صورت زیر است:
.htaccess
نقطه ابتدای نام فایل در سیستمهای Unix و Linux باعث میشود فایل در بسیاری از ابزارها بهصورت Hidden File نمایش داده شود. به همین دلیل ممکن است وارد File Manager هاست شوید اما فایل .htaccess را مشاهده نکنید.
در cPanel معمولاً باید گزینه Show Hidden Files را فعال کنید تا فایلهای مخفی نمایش داده شوند.
همچنین نام فایل باید دقیقاً .htaccess باشد. فایلهایی مانند موارد زیر فایل استاندارد Apache محسوب نمیشوند:
htaccess
.htaccess.txt
htaccess.txt
فایل .htaccess روی چه وبسروری کار میکند؟
.htaccess اساساً برای Apache HTTP Server طراحی شده است. بعضی وبسرورهای سازگار با Apache نیز ممکن است از آن پشتیبانی کنند؛ برای مثال بسیاری از سرویسهای مبتنی بر LiteSpeed امکان استفاده از آن را فراهم میکنند.
اما Nginx فایل .htaccess را پردازش نمیکند. در Nginx باید Redirect، Rewrite، Header و سایر تنظیمات در Configuration خود Nginx تعریف شوند.

بنابراین اگر قصد دارید کدی را در .htaccess قرار دهید و مطمئن نیستید وبسرور سایت چیست، ابتدا این موضوع را از شرکت هاستینگ یا تنظیمات سرور بررسی کنید.
آیا .htaccess باید فعال شود؟
معمولاً عبارت «فعال کردن htaccess» کمی سادهسازی شده است. در واقع Apache باید اجازه دهد فایلهای Distributed Configuration در دایرکتوری موردنظر خوانده شوند.
این موضوع با دستوراتی مانند AllowOverride و AllowOverrideList کنترل میشود. اگر:
AllowOverride None
و AllowOverrideList نیز اجازه لازم را ندهد، Apache فایل .htaccess را نادیده میگیرد. مقدار پیشفرض AllowOverride نیز در Apache برابر None است.
در هاست اشتراکی معمولاً کاربر به Configuration اصلی Apache دسترسی ندارد و این تنظیمات توسط شرکت هاستینگ مدیریت میشود.
AllowOverride چیست؟
AllowOverride مشخص میکند چه دستهای از Directiveها اجازه دارند از طریق .htaccess تغییر کنند.
برای مثال ممکن است Apache اجازه استفاده از قابلیتهای مربوط به FileInfo را بدهد، اما برخی تنظیمات دیگر را مجاز نکند. در نتیجه ممکن است یک کد از نظر Syntax صحیح باشد ولی روی سرور شما اجرا نشود.
در Apache جدیدتر، AllowOverrideList نیز امکان محدود کردن دسترسی به Directiveهای مشخص را فراهم میکند. این روش میتواند نسبت به فعال کردن همه Overrideها کنترل دقیقتری ایجاد کند.
بنابراین اگر یک Rule در .htaccess کار نمیکند، فقط خود کد را بررسی نکنید؛ Module، نوع Directive و تنظیمات AllowOverride را نیز بررسی کنید.
فایل .htaccess کجا قرار دارد؟
در یک سایت معمولی، فایل .htaccess در Document Root قرار میگیرد. در بسیاری از هاستهای cPanel، مسیر اصلی سایت چیزی شبیه این است:
public_html/.htaccess
در یک سایت وردپرسی ممکن است ساختار کلی به شکل زیر باشد:
public_html/
├── .htaccess
├── index.php
├── wp-config.php
├── wp-admin/
├── wp-content/
└── wp-includes/
البته Apache میتواند .htaccess را در دایرکتوریهای دیگر نیز پردازش کند. قوانین یک فایل میتوانند روی همان دایرکتوری و زیرشاخههای آن اثر بگذارند و فایلهای پایینتر نیز میتوانند در فرآیند پردازش وارد شوند.
آیا میتوان چند فایل .htaccess داشت؟
بله. Apache اجازه میدهد در دایرکتوریهای مختلف فایل .htaccess وجود داشته باشد.
برای مثال:
public_html/
├── .htaccess
├── blog/
│ └── .htaccess
└── private/
└── .htaccess
اما استفاده بیدلیل از چندین فایل میتواند عیبیابی را سختتر کند. اگر قوانین Rewrite و Access Control در چندین سطح پخش شوند، تشخیص اینکه یک درخواست دقیقاً تحت تأثیر کدام Rule قرار گرفته دشوارتر خواهد شد.
مهمترین کاربردهای فایل .htaccess چیست؟
مهمترین کاربردهای این فایل را میتوان در چند گروه خلاصه کرد:
- Redirect: انتقال URL قدیمی به URL جدید.
- Rewrite: بازنویسی درخواستها بدون تغییر الزاماً URL قابل مشاهده.
- Permalink: کمک به ساخت URLهای خوانا در WordPress روی Apache.
- Error Handling: تعیین صفحات خطای 403، 404 و سایر خطاها.
- Access Control: محدود کردن دسترسی به برخی منابع یا مسیرها.
- HTTP Headers: تنظیم برخی Headerهای پاسخ.
- Cache و Compression: در صورت فعال بودن Moduleها و مناسب بودن معماری سرور.
بنابراین نمیتوان .htaccess را صرفاً یک فایل مخصوص سئو دانست. این فایل بخشی از لایه Web Server است و سئو تنها یکی از حوزههایی است که میتواند از تنظیمات صحیح آن تأثیر بگیرد.
.htaccess در وردپرس چه کاربردی دارد؟
اگر سایت وردپرسی شما روی Apache قرار دارد، یکی از مهمترین کاربردهای .htaccess مربوط به Permalink و Rewrite است.
WordPress برای ساختار Permalinkهای زیبا در Apache میتواند از Rewrite Rules استفاده کند. یک نمونه رایج از قوانین پایه وردپرس به شکل زیر است:
# 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
نباید این کد را بدون بررسی ساختار سایت جایگزین فایل موجود کنید؛ زیرا ممکن است .htaccess شما شامل Redirectها یا تنظیمات دیگری باشد.
اگر .htaccess وردپرس حذف شود چه اتفاقی میافتد؟
حذف فایل یا Rewrite Rules آن میتواند در بعضی سایتهای وردپرسی باعث شود URLهای داخلی دیگر به درستی پردازش نشوند و با 404 Not Found مواجه شوند.
اگر مشکل مربوط به Rewriteهای استاندارد وردپرس باشد، یکی از نخستین اقدامها این است که به:
پیشخوان → تنظیمات → پیوندهای یکتا
بروید و تنظیمات را دوباره ذخیره کنید.
اگر فایل قابل نوشتن نباشد، WordPress میتواند قوانین موردنیاز را برای قرار دادن دستی نمایش دهد. بنابراین قبل از جایگزینی کل فایل، ابتدا نسخه فعلی را Backup کنید.
چگونه فایل .htaccess بسازیم؟
ساخت فایل ساده است، اما مهمترین نکته این است که ویرایش اشتباه آن میتواند کل سایت را دچار مشکل کند.
یک فایل متنی جدید با نام دقیق زیر بسازید:
.htaccess
سپس آن را در دایرکتوری موردنظر قرار دهید. برای مدیریت فایل میتوانید از:
- File Manager هاست
- FTP
- SFTP
استفاده کنید.
چگونه فایل .htaccess را در cPanel ایجاد کنیم؟
اگر از cPanel استفاده میکنید، معمولاً میتوانید وارد:
File Manager → public_html → New File
شوید و نام فایل را .htaccess قرار دهید.
اگر فایل از قبل وجود دارد، فایل جدیدی مانند .htaccess.txt نسازید؛ بلکه ابتدا گزینه Show Hidden Files را فعال کنید و فایل موجود را بررسی کنید.
قبل از ویرایش .htaccess چه کاری انجام دهیم؟
مهمترین قانون کار با این فایل این است:
قبل از هر تغییر از .htaccess نسخه پشتیبان بگیرید.
برای مثال میتوانید یک کپی از فایل داشته باشید:
.htaccess-backup
یا محتوای فایل را در یک فایل متنی خارج از هاست ذخیره کنید.
دلیل این احتیاط این است که یک Syntax Error یا Rewrite اشتباه میتواند باعث 500 Internal Server Error شود.
Redirect در .htaccess چیست؟
یکی از مهمترین کاربردهای .htaccess ایجاد Redirect است.
فرض کنید URL قدیمی سایت شما:
/old-page/
بوده و صفحه جدید در:
/new-page/
قرار گرفته است. یک Redirect ساده میتواند به شکل زیر باشد:
Redirect 301 /old-page/ /new-page/
در این حالت درخواست URL قدیمی با Redirect دائمی به URL جدید منتقل میشود.
Google برای تغییر دائمی URLها استفاده از Redirectهای سمت سرور مانند 301 یا 308 را توصیه میکند.
Redirect 301 در .htaccess چه زمانی استفاده میشود؟
وقتی یک URL برای همیشه به آدرس دیگری منتقل شده است، Redirect دائمی میتواند گزینه مناسبی باشد.
Redirect 301 /page-old/ https://example.com/page-new/
نکته مهم این است که مقصد باید تا حد امکان مرتبطترین نسخه جدید صفحه باشد، نه اینکه همه URLهای قدیمی را بدون دلیل به صفحه اصلی بفرستیم.
تفاوت Redirect و Rewrite چیست؟
این دو مفهوم از مهمترین بخشهای کار با .htaccess هستند.
Redirect به مرورگر میگوید آدرس دیگری را درخواست کند:
/old-page/
↓
/new-page/
در نتیجه URL مرورگر تغییر میکند.
اما Rewrite میتواند درخواست را در سمت سرور به مسیر دیگری پردازش کند، بدون اینکه الزاماً URL قابل مشاهده کاربر تغییر کند.
برای مثال کاربر میتواند آدرس خوانایی مانند:
/product/123/
را درخواست کند، در حالی که Apache درخواست را به ساختار داخلی دیگری پردازش میکند.
Apache نیز mod_rewrite را برای تعریف قواعد Rewrite و Redirect معرفی میکند و تأکید دارد که رفتار Rewrite در context مربوط به .htaccess با Configuration اصلی سرور تفاوتهایی دارد.
چرا ترتیب RewriteRuleها مهم است؟
در فایلهایی که چندین Rule دارند، ترتیب قوانین بسیار مهم است. یک Rule میتواند مسیر درخواست را تغییر دهد یا باعث شود Rule بعدی دیگر به شکل مورد انتظار اجرا نشود.
بنابراین هنگام اضافه کردن قانون جدید، آن را صرفاً در اولین خط خالی قرار ندهید. بررسی کنید:
- قبل از آن چه Ruleهایی اجرا میشوند؟
- آیا Redirect دیگری روی همین URL وجود دارد؟
- آیا Rule جدید با قوانین WordPress تداخل دارد؟
- آیا امکان ایجاد Redirect Loop وجود دارد؟
.htaccess و HTTPS؛ چگونه HTTP را به HTTPS منتقل کنیم؟
بعد از فعال شدن SSL، معمولاً لازم است نسخه HTTP سایت به نسخه HTTPS منتقل شود. یک نمونه متداول با mod_rewrite چنین است:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
اما این کد را نباید بدون بررسی زیرساخت روی همه سایتها قرار داد. اگر سایت پشت CDN، Reverse Proxy یا Load Balancer قرار دارد، تشخیص وضعیت HTTPS ممکن است به شکل متفاوتی انجام شود.
در چنین شرایطی تنظیمات CDN و سرور باید با یکدیگر هماهنگ باشند.
برای اطلاعات بیشتر درباره CDN میتوانید مقاله CDN را نیز مطالعه کنید.
.htaccess و www یا non-www
سایت باید یک نسخه اصلی و ترجیحی از دامنه داشته باشد؛ برای مثال:
https://www.example.com
و نسخههای دیگر به آن منتقل شوند.
یک نمونه ساده:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
البته در سایت واقعی باید دامنه، HTTPS، CDN و Reverse Proxy را در نظر گرفت.
همچنین Redirectها باید با Canonical، Sitemap و لینکهای داخلی هماهنگ باشند.
استفاده از .htaccess برای URL Rewrite
فرض کنید سیستم قدیمی سایت URL زیر را استفاده میکرده است:
/product.php?id=123
و قصد دارید URL خواناتری مانند زیر داشته باشید:
/product/123/
در این شرایط میتوان با RewriteRule درخواست را به ساختار داخلی مناسب هدایت کرد.
در .htaccess، مسیر مورد استفاده در RewriteRule نسبت به دایرکتوری جاری تفسیر میشود؛ به همین دلیل کدی که در Configuration اصلی Apache کار میکند ممکن است بدون تغییر در .htaccess کار نکند.
مدیریت صفحات 404 با .htaccess
میتوان تعیین کرد که در صورت پیدا نشدن یک منبع، Apache صفحه خطای مشخصی را نمایش دهد.
ErrorDocument 404 /404.html
در این حالت، صفحه /404.html برای خطای 404 استفاده میشود.
صفحه 404 مناسب باید به کاربر کمک کند مسیر خود را پیدا کند؛ برای مثال لینک صفحه اصلی، جستوجو یا صفحات مهم سایت را در اختیار او قرار دهد.
مدیریت خطای 403 با .htaccess
برای خطای 403 نیز میتوان ErrorDocument تعریف کرد:
ErrorDocument 403 /403.html
اما 403 و 404 یکسان نیستند:
- 403: سرور درخواست را فهمیده اما دسترسی به منبع مجاز نیست.
- 404: منبع مورد درخواست پیدا نشده است.
تشخیص صحیح این دو خطا برای عیبیابی و سئو اهمیت دارد.
آیا میتوان خطای 500 را با .htaccess مدیریت کرد؟
از نظر Apache میتوان ErrorDocument مربوط به 500 تعریف کرد:
ErrorDocument 500 /500.html
اما اگر خود .htaccess باعث خطای 500 شده باشد، ممکن است ErrorDocument نیز نتواند مشکل اصلی را حل کند. بنابراین در چنین شرایطی باید ابتدا آخرین تغییرات فایل و Error Log سرور بررسی شوند.

چرا بعد از تغییر .htaccess خطای 500 میگیریم؟
اگر بلافاصله بعد از ویرایش فایل با 500 Internal Server Error مواجه شدید، موارد زیر را بررسی کنید:
- Syntax اشتباه
- Directive ناشناخته
- Module غیرفعال یا نصبنشده
- عدم اجازه Directive در
AllowOverride - Regex اشتباه
- تداخل Rewrite Rules
- Syntax ناسازگار با نسخه Apache
Apache نیز در راهنمای عیبیابی خود توصیه میکند هنگام دریافت خطای سرور، Error Log را بررسی کنید؛ این Log معمولاً مشخص میکند مشکل مربوط به Directive، Syntax یا سطح دسترسی تنظیمات بوده است.
اگر .htaccess باعث خطای 500 شد چه کنیم؟
اولین اقدام این است که آخرین تغییر را برگردانید.
اگر بعد از اضافه کردن یک Rule سایت خراب شده است:
- آخرین Rule را حذف کنید یا Backup قبلی را Restore کنید.
- سایت را دوباره بررسی کنید.
- Error Log Apache را بررسی کنید.
- اگر به Log دسترسی ندارید، از پشتیبانی هاست بخواهید خطای Apache را بررسی کند.
- Rule مشکلدار را پس از اصلاح، بهتنهایی تست کنید.
بهتر است چندین Rule را همزمان تغییر ندهید؛ زیرا در صورت ایجاد خطا، مشخص نخواهد بود کدام تغییر مشکل را ایجاد کرده است.
جلوگیری از دسترسی به فایلها با .htaccess
یکی دیگر از کاربردهای .htaccess کنترل دسترسی است. Apache ابزارهایی برای Authentication و Authorization در اختیار مدیر سرور قرار میدهد.
برای مثال، میتوان یک پوشه خصوصی را با Basic Authentication محافظت کرد:
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
مسیر واقعی فایل .htpasswd باید صحیح باشد و بهتر است خارج از مسیر عمومی وب قرار گیرد.
فایل .htpasswd چیست؟
.htpasswd میتواند اطلاعات مورد استفاده برای HTTP Basic Authentication را نگهداری کند. در ساختار ساده:
.htaccess
.htpasswd
.htaccess مشخص میکند چه نوع احراز هویتی مورد نیاز است و .htpasswd اطلاعات اعتبارسنجی کاربران را در اختیار Apache قرار میدهد.
رمز عبور نباید به شکل Plain Text در فایل ذخیره شود و بهتر است ایجاد و مدیریت آن با ابزارهای استاندارد Apache انجام شود.
آیا میتوان IP خاصی را با .htaccess مسدود کرد؟
Apache امکان کنترل دسترسی بر اساس IP را فراهم میکند. برای نمونه، در ساختارهای مناسب میتوان از دستوراتی مانند:
Require not ip 192.0.2.10
استفاده کرد.
اما Syntax دقیق و محل استفاده باید با نسخه Apache و تنظیمات Override هماهنگ باشد.
همچنین اگر سایت پشت CDN یا Reverse Proxy قرار دارد، IP مشاهدهشده توسط Apache ممکن است IP Proxy باشد، نه IP واقعی بازدیدکننده. بنابراین Block کردن IP بدون شناخت معماری شبکه میتواند نتیجه اشتباه ایجاد کند.
آیا میتوان wp-config.php را با .htaccess محافظت کرد؟
wp-config.php یکی از فایلهای حساس WordPress است و نباید محتوای خام آن از طریق HTTP در اختیار کاربران قرار گیرد.
در یک سرور PHP که بهدرستی پیکربندی شده است، فایل PHP باید توسط مفسر اجرا شود و محتوای Source آن نباید بهصورت متن خام نمایش داده شود.
بنابراین اگر درباره امنیت wp-config.php نگرانی دارید، قبل از افزودن دهها Rule به .htaccess ابتدا باید علت اصلی و پیکربندی PHP و Web Server بررسی شود.
.htaccess و Hotlink چیست؟
Hotlinking زمانی رخ میدهد که سایت دیگری فایلهایی مانند تصاویر را مستقیماً از سرور شما بارگذاری کند.
در برخی شرایط میتوان با .htaccess و بررسی Referer بخشی از این درخواستها را محدود کرد؛ اما این کار باید با احتیاط انجام شود، زیرا ممکن است CDN، مرورگر یا درخواستهای معتبر نیز به اشتباه Block شوند.
اگر سایت از CDN استفاده میکند، بهتر است ابتدا بررسی کنید آیا CDN ابزار مناسبی برای مدیریت Hotlink Protection در اختیار شما قرار میدهد یا خیر.
.htaccess و Cache مرورگر
Apache میتواند در صورت فعال بودن Moduleهای مربوط، برخی Headerهای مرتبط با Cache مانند Cache-Control و Expires را تنظیم کند.
اما Cache امروزی فقط به .htaccess وابسته نیست و ممکن است CDN، Browser Cache، Reverse Proxy و افزونه Cache وردپرس نیز در آن دخیل باشند.
بنابراین اضافه کردن چند قطعه کد Cache از اینترنت بدون بررسی تنظیمات فعلی میتواند باعث ایجاد سیاستهای متناقض شود.
.htaccess و فشردهسازی فایلها
در Apache و در صورت فعال بودن Module مناسب، میتوان Compression پاسخها را تنظیم کرد. برای مثال mod_deflate میتواند در فشردهسازی برخی پاسخها نقش داشته باشد.
با این حال اگر CDN شما Compression را انجام میدهد، افزودن تنظیمات اضافی در Apache باید با توجه به معماری واقعی سایت انجام شود.
آیا .htaccess سرعت سایت را کاهش میدهد؟
امکان دارد، اما وجود .htaccess بهتنهایی به معنی کند بودن سایت نیست.
Apache توضیح میدهد که وقتی استفاده از .htaccess مجاز باشد، در فرآیند درخواست باید فایلهای مربوط به مسیر بررسی شوند. همچنین اگر مدیر سرور به Configuration اصلی دسترسی داشته باشد، معمولاً قرار دادن تنظیمات در Configuration اصلی از نظر Performance و Security ترجیح دارد.
این موضوع در هاست اشتراکی معمولاً در اختیار صاحب سایت نیست. بنابراین برای یک سایت وردپرسی، راهکار عملی این نیست که صرفاً فایل .htaccess را حذف کنیم؛ بلکه باید Ruleهای غیرضروری، تکراری و پیچیده را شناسایی کرد.
آیا .htaccess روی سئو تأثیر دارد؟
.htaccess یک عامل رتبهبندی مستقیم Google نیست.
اما تنظیمات آن میتواند تأثیر غیرمستقیم و بسیار مهمی بر Technical SEO داشته باشد. برای مثال:
- Redirect اشتباه میتواند کاربران و خزندهها را به URL نادرست بفرستد.
- Rewrite اشتباه میتواند صفحات سالم را 404 کند.
- Redirect Chain میتواند درخواست را از چند مرحله عبور دهد.
- اجبار HTTPS میتواند به یکپارچه شدن نسخههای HTTP و HTTPS کمک کند.
- قوانین اشتباه Access Control ممکن است دسترسی به منابع موردنیاز را مختل کنند.
در راهنمای Google نیز Redirectهای دائمی سمت سرور مانند 301 و 308 برای انتقال دائمی URLها توصیه شده و تأکید شده است که زنجیره Redirect تا حد امکان کوتاه باشد.
برای مطالعه بیشتر درباره سئو سایت میتوانید راهنمای مربوط به سئو را نیز مطالعه کنید.
Redirect Chain در .htaccess چیست؟
فرض کنید ساختار Redirect چنین باشد:
URL A
↓
URL B
↓
URL C
↓
URL D
این یک Redirect Chain است.
اگر امکان آن وجود دارد، ساختار بهتر این است:
URL A
↓
URL D
Google توصیه میکند در صورت امکان URL قدیمی مستقیماً به مقصد نهایی منتقل شود؛ زیرا زنجیرههای طولانی باعث تأخیر و پیچیدگی بیشتر میشوند.
آیا همه URLهای قدیمی را به صفحه اصلی Redirect کنیم؟
از نظر فنی میتوان چنین قوانینی ایجاد کرد، اما از نظر سئو همیشه روش مناسبی نیست.
اگر یک مقاله قدیمی به مقاله جدید مشخصی منتقل شده است، بهتر است Redirect به همان محتوای مرتبط انجام شود:
مقاله قدیمی → مقاله جدید مرتبط
نه اینکه همه صفحات قدیمی را به:
صفحه اصلی
منتقل کنیم.
Google نیز در سناریوهای مهاجرت سایت بر انتقال URLهای قدیمی به مقصدهای مرتبط و نهایی تأکید میکند.
آیا .htaccess همان robots.txt است؟
خیر. این دو فایل کاربرد کاملاً متفاوتی دارند.
| فایل | کاربرد اصلی |
|---|---|
.htaccess | تنظیم رفتار وبسرور Apache |
robots.txt | ارائه دستورالعمل Crawl به خزندهها |
بنابراین اگر هدف شما کنترل Indexing یک صفحه است، نباید بهصورت تصادفی یک Rule در .htaccess قرار دهید. ابتدا باید مشخص کنید هدف شما Redirect، Rewrite، Block، noindex یا حذف URL است.
آیا میتوان Canonical را با .htaccess تنظیم کرد؟
در شرایط خاص میتوان Headerهای مرتبط با Canonical را برای برخی منابع تنظیم کرد، اما برای صفحات HTML معمولاً Canonical در خود صفحه و با:
<link rel="canonical">
مدیریت میشود.
اگر هدف شما انتقال دائمی یک URL به URL دیگر است، موضوع اصلی Redirect است و نباید Canonical را جایگزین آن در نظر گرفت.
آیا میتوان با .htaccess صفحه را Noindex کرد؟
این موضوع به نوع منبع بستگی دارد. برای صفحات HTML میتوان از Meta Robots استفاده کرد:
<meta name="robots" content="noindex">
برای برخی منابع غیر HTML نیز میتوان از Header مناسب استفاده کرد.
robots.txt نیز برای مدیریت Crawl است و جایگزین مستقیم noindex یا Redirect نیست. بنابراین قبل از تغییر .htaccess باید دقیقاً مشخص کنید مشکل موردنظر چیست.
چند نمونه کاربردی .htaccess
انتقال یک صفحه قدیمی
Redirect 301 /old-page/ https://example.com/new-page/
تعریف صفحه 404
ErrorDocument 404 /404.html
تعریف صفحه 403
ErrorDocument 403 /403.html
فعال کردن Rewrite Engine
RewriteEngine On
انتقال HTTP به HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
این نمونهها آموزشی هستند و نباید بدون بررسی نسخه Apache، Moduleها، CDN و ساختار سایت مستقیماً روی محیط Production اجرا شوند.
چرا بعضی دستورات .htaccess کار نمیکنند؟
اگر کدی را در اینترنت پیدا کردهاید اما روی سایت شما اجرا نمیشود، معمولاً یکی از این موارد باید بررسی شود:
- وبسرور Apache نیست.
- Module موردنیاز فعال نیست.
- Directive در
AllowOverrideمجاز نیست. AllowOverrideListاجازه Directive را نمیدهد.- Syntax با نسخه Apache سازگار نیست.
- Rule دیگری قبل یا بعد از آن روی درخواست اثر میگذارد.
برای نمونه، RewriteRule به mod_rewrite وابسته است و Apache برای پردازش Rewrite در .htaccess به مجوز مناسب در Configuration نیاز دارد.
چرا قوانین .htaccess در Nginx کار نمیکنند؟
چون Nginx از معماری متفاوتی استفاده میکند و فایل .htaccess را برای تنظیمات خود پردازش نمیکند.
اگر سایت از Apache به Nginx منتقل شود، قوانین موجود در .htaccess باید به Configuration مناسب Nginx تبدیل شوند.
این موضوع در Migration بسیار مهم است؛ زیرا ممکن است بعد از مهاجرت:
- Permalinkها خراب شوند.
- Redirectها از کار بیفتند.
- URLها 404 شوند.
- برخی تنظیمات امنیتی اجرا نشوند.
در واقع هنگام انتقال سرور نباید فقط فایلهای سایت را منتقل کرد؛ منطق Web Server Configuration نیز باید منتقل شود.
مهاجرت سایت و نقش .htaccess در سئو
فرض کنید سایت از:
oldsite.ir
به:
newsite.ir
منتقل شده است.
یکی از مهمترین کارها در این فرآیند، ایجاد Mapping بین URLهای قدیمی و URLهای جدید است:
oldsite.ir/page-a/
↓
newsite.ir/page-a/
oldsite.ir/page-b/
↓
newsite.ir/page-b/
برای سایتهای Apache، .htaccess میتواند یکی از ابزارهای پیادهسازی این Redirectها باشد. Google نیز استفاده از Redirectهای دائمی سمت سرور و انتقال مستقیم URLهای قدیمی به مقصد نهایی را توصیه میکند.
آیا تغییر Permalink در وردپرس .htaccess را تغییر میدهد؟
در WordPress روی Apache، تغییر ساختار Permalink میتواند باعث بازنویسی Rewrite Rules شود.
به همین دلیل اگر بعد از تغییر Permalink صفحات داخلی 404 شدند، .htaccess و Rewrite Rules یکی از نخستین مواردی هستند که باید بررسی شوند.
آیا حذف کامل .htaccess وردپرس کار درستی است؟
بهصورت عمومی خیر.
اگر WordPress روی Apache با Pretty Permalinks کار میکند، حذف Rewrite Rules میتواند URLهای سایت را مختل کند.
بهتر است قبل از حذف، مشخص کنید کدام بخش فایل مربوط به WordPress و کدام قسمت مربوط به تنظیمات سفارشی، افزونهها یا Redirectهاست.
وجود Markerهایی مانند:
# BEGIN WordPress
...
# END WordPress
کمک میکند بخش مربوط به WordPress از سایر تنظیمات قابل تشخیص باشد.
آیا افزونههای وردپرس میتوانند .htaccess را تغییر دهند؟
بله. افزونههای مختلف ممکن است برای Redirect، Cache، Security، Rewrite یا Protection در .htaccess تغییر ایجاد کنند.
به همین دلیل هنگام بررسی یک فایل بزرگ باید مشخص کنید هر بخش توسط چه چیزی ایجاد شده است.
حذف کامل فایل و قرار دادن تنها یک نسخه ساده از قوانین WordPress ممکن است باعث از بین رفتن Redirectها یا تنظیمات مهم دیگر شود.
آیا .htaccess را میتوان از داخل WordPress ویرایش کرد؟
برخی افزونهها امکان ویرایش فایلهای سایت را از داخل WordPress فراهم میکنند، اما برای فایل حساسی مانند .htaccess، استفاده از File Manager یا SFTP معمولاً کنترل بیشتری در اختیار مدیر سایت قرار میدهد.
اگر حساب WordPress به خطر بیفتد، ابزارهای مدیریت فایل داخل پیشخوان نیز میتوانند به یک سطح خطر اضافی تبدیل شوند. برای تغییرات حساس، بهتر است دسترسی فایلها محدود و Backup معتبر در اختیار داشته باشید.
.htaccess را مرتب و مستند نگه دارید
اگر فایل شما بزرگ است، قوانین را با Comment دستهبندی کنید:
# Redirects
Redirect 301 /old-url/ /new-url/
# Error Pages
ErrorDocument 404 /404.html
# WordPress
# BEGIN WordPress
...
# END WordPress
خطوطی که با # شروع میشوند Comment هستند و توسط Apache بهعنوان Directive اجرا نمیشوند. این روش برای نگهداری و عیبیابی فایل بسیار مفید است.
قوانین سفارشی را داخل بخش WordPress قرار دهیم؟
بهتر است قوانین سفارشی خود را در بخش جداگانه نگهداری کنید، مگر اینکه دقیقاً بدانید ابزار تولیدکننده فایل چگونه آن بخش را مدیریت میکند.
دلیل این موضوع این است که WordPress یا ابزارهای دیگر ممکن است در زمان بازسازی Rewrite Rules، محتوای بین Markerهای مخصوص خود را تغییر دهند.
آیا .htaccess برای تمام سایتها ضروری است؟
خیر.
وجود این فایل برای تمام سایتها الزامی نیست. کاربرد آن به وبسرور و معماری سایت بستگی دارد.
در Apache ممکن است تنظیمات در Configuration اصلی سرور قرار گرفته باشند و اصلاً نیازی به .htaccess نباشد.
در WordPress روی Apache احتمال استفاده از آن بیشتر است، بهخصوص برای Pretty Permalinks.
.htaccess بهتر است یا افزونه وردپرس؟
پاسخ به نوع کاری که میخواهید انجام دهید بستگی دارد.
برای مثال یک Redirect ساده را میتوان با افزونه Redirect نیز مدیریت کرد. اما اجرای Redirect در سطح Web Server میتواند پیش از اجرای کامل WordPress انجام شود و در بعضی سناریوها سربار کمتری داشته باشد.
در مقابل، ویرایش مستقیم .htaccess برای کاربری که با Apache و Regex آشنا نیست، ریسک بیشتری دارد.
در پروژه حرفهای باید میان Performance، امنیت، قابلیت نگهداری، سادگی مدیریت و تعداد Ruleها تعادل برقرار کرد.
.htaccess بهتر است یا Nginx Configuration؟
مقایسه این دو با عبارت «کدام بهتر است؟» چندان دقیق نیست؛ زیرا به معماری سرور مربوط میشوند.
در Apache، .htaccess امکان اعمال تنظیمات دایرکتوریمحور را بدون دستکاری مستقیم Configuration اصلی فراهم میکند. اگر مدیر سرور به Configuration اصلی دسترسی داشته باشد، Apache قرار دادن تنظیمات در آن سطح را از نظر Performance و Security ترجیح میدهد.
در Nginx نیز تنظیمات در Configuration مرکزی انجام میشوند.
چگونه بفهمیم سایت Apache است یا Nginx؟
چند روش برای بررسی وجود دارد:
- از پشتیبانی هاست سؤال کنید.
- اطلاعات Web Server را در کنترلپنل بررسی کنید.
- Headerهای HTTP را بررسی کنید؛ البته این روش همیشه قطعی نیست.
اگر سایت پشت CDN یا Reverse Proxy باشد، Headerهای قابل مشاهده ممکن است اطلاعات کامل Web Server اصلی را نشان ندهند.
آیا .htaccess روی سئو سایتهای فارسی تأثیر دارد؟
زبان و دامنه سایت اهمیتی در عملکرد .htaccess ندارد. اگر سایت فارسی روی Apache اجرا شود، همان قابلیتهای Redirect، Rewrite، Error Handling و Access Control را خواهد داشت.
در پروژههای سئو فارسی، کاربرد مهم .htaccess معمولاً هنگام تغییر URL، تغییر ساختار سایت، تغییر دامنه، اصلاح Redirectها و رفع خطاهای فنی دیده میشود.
یک سناریوی عملی؛ اصلاح URL قدیمی سایت
فرض کنید URL قبلی:
/example-service/
به:
/services/example-service/
تغییر کرده است.
در صورت مناسب بودن مقصد، میتوان یک Redirect ایجاد کرد:
Redirect 301 /example-service/ /services/example-service/
بعد از اجرا باید بررسی کنید:
/example-service/ → 301
/services/example-service/ → 200
همچنین لینکهای داخلی، Sitemap و Canonical باید با URL جدید هماهنگ باشند.
یک سناریوی مهم برای سئو؛ تغییر دامنه
اگر سایت از یک دامنه به دامنه دیگری منتقل میشود، بهتر است تا حد امکان ساختار URLها حفظ شود:
oldsite.ir/page-a/
→
newsite.ir/page-a/
oldsite.ir/page-b/
→
newsite.ir/page-b/
ایجاد یک Redirect کلی برای فرستادن تمام صفحات به Homepage معمولاً انتخاب مناسبی نیست. هدف باید انتقال کاربر و سیگنال URL قدیمی به مرتبطترین مقصد جدید باشد.
چه فایلهایی نباید بهصورت عمومی در دسترس باشند؟
در هر سایت باید فایلها و دایرکتوریهای حساس شناسایی شوند. این موارد میتوانند شامل Backupها، فایلهای Log، فایلهای Configuration یا فایلهای موقتی باشند.
اما بهتر است به جای ایجاد Ruleهای بسیار کلی، دقیقاً مشخص کنید کدام فایل باید Block شود.
Rule امنیتی خوب، دسترسی غیرضروری را محدود میکند بدون اینکه عملکرد سالم سایت را مختل کند.
آیا میتوان فایلهای Backup را با .htaccess مسدود کرد؟
از نظر فنی امکان محدود کردن دسترسی HTTP به فایلهایی مانند:
backup.zip
database.sql
site-backup.tar.gz
وجود دارد؛ اما راهکار بهتر این است که فایل حساس اصلاً داخل Document Root عمومی قرار نگیرد.
.htaccess میتواند یک لایه دفاعی اضافه باشد، اما نباید جایگزین معماری صحیح ذخیرهسازی فایلهای حساس شود.
آیا تغییر .htaccess نیاز به Restart Apache دارد؟
در حالت معمول، تغییر فایل .htaccess نیاز به Restart دستی Apache ندارد. یکی از مزیتهای این نوع Configuration همین است که تغییرات آن بدون دستکاری مستقیم Configuration اصلی سرور اعمال میشوند.
البته اگر تغییر موردنظر در Configuration اصلی Apache باشد، موضوع متفاوت است و ممکن است Reload یا Restart سرویس موردنیاز باشد.
چگونه بعد از تغییر .htaccess آن را تست کنیم؟
بعد از هر تغییر مهم، فقط Homepage را بررسی نکنید. حداقل موارد زیر را تست کنید:
- صفحه اصلی
- یک مقاله
- یک صفحه خدمات
- URL قدیمی
- URL جدید
- یک فایل استاتیک
- صفحه 404
- HTTP و HTTPS
- www و non-www
همچنین Status Codeها را بررسی کنید:
| Status Code | معنی کلی |
|---|---|
| 200 | درخواست با موفقیت پاسخ داده شده است. |
| 301 | انتقال دائمی |
| 302 | انتقال موقت |
| 403 | دسترسی مجاز نیست. |
| 404 | منبع پیدا نشده است. |
| 500 | خطای سمت سرور |
بهترین روش تست Redirectهای .htaccess چیست؟
برای هر URL قدیمی، مقصد مورد انتظار را از قبل مشخص کنید:
| URL | نتیجه مورد انتظار |
|---|---|
/old-page/ | 301 به URL جدید |
/deleted-page/ | 404 یا 410، در صورت حذف واقعی |
/http-page/ | 301 به HTTPS |
/www-page/ | 301 به نسخه اصلی دامنه |
/new-page/ | 200 |
برای پروژههای بزرگ، بهتر است Redirectها بهصورت گروهی Crawl و بررسی شوند تا Chain، Loop و مقصدهای اشتباه شناسایی شوند.
اگر htaccess خراب شد چگونه آن را بازیابی کنیم؟
بهترین روش، Restore کردن آخرین Backup سالم است.
اگر Backup ندارید و سایت WordPress روی Apache است، میتوانید Rewrite Rules پایه WordPress را مطابق نسخه و ساختار سایت بازسازی کنید. سپس قوانین سفارشی را یکییکی اضافه و بعد از هر تغییر تست کنید.
این روش بسیار امنتر از Paste کردن تعداد زیادی Rule بهصورت همزمان است.
مهمترین اشتباهات هنگام کار با .htaccess
- ویرایش فایل بدون Backup
- کپی کردن کدهای اینترنت بدون بررسی نسخه Apache
- استفاده از Directive مربوط به Module غیرفعال
- نادیده گرفتن AllowOverride
- ایجاد Redirect Chain
- Redirect کردن همه URLها به Homepage
- نادیده گرفتن CDN یا Reverse Proxy
- ایجاد Ruleهای امنیتی بسیار کلی
- مخلوط کردن قوانین چند افزونه بدون بررسی
- تغییر چندین Rule بهصورت همزمان و بدون تست
چکلیست حرفهای بررسی فایل .htaccess
| مورد | سؤال اصلی |
|---|---|
| وبسرور | Apache است یا Nginx؟ |
| محل فایل | در Document Root صحیح قرار دارد؟ |
| Backup | نسخه سالم قبلی وجود دارد؟ |
| Rewrite | قوانین mod_rewrite صحیح هستند؟ |
| Redirect | URLهای قدیمی مقصد صحیح دارند؟ |
| Chain | زنجیره Redirect وجود ندارد؟ |
| HTTPS | نسخه HTTP و HTTPS درست مدیریت شدهاند؟ |
| Domain | نسخه اصلی www یا non-www مشخص است؟ |
| WordPress | Rewrite Rules اصلی سالم هستند؟ |
| Syntax | خطای Syntax وجود ندارد؟ |
| Module | Moduleهای موردنیاز فعال هستند؟ |
| AllowOverride | Directive موردنظر اجازه اجرا دارد؟ |
| CDN | قوانین با CDN و Proxy تداخل ندارند؟ |
| Performance | Ruleهای غیرضروری حذف شدهاند؟ |
بهترین روش کار با .htaccess چیست؟
اگر بخواهیم کل مقاله را به یک فرآیند عملی تبدیل کنیم، هنگام کار با این فایل این ترتیب را دنبال کنید:
- هدف را مشخص کنید: Redirect، Rewrite، Access Control یا Header؟
- وبسرور را مشخص کنید: اگر Nginx دارید، راهکار باید در Configuration Nginx اجرا شود.
- Backup بگیرید.
- Module و AllowOverride را بررسی کنید.
- سادهترین Rule ممکن را بنویسید.
- در هر مرحله فقط یک تغییر ایجاد کنید.
- Status Code و URL نهایی را بررسی کنید.
- در صورت خطا Error Log را بررسی کنید.
این روش بسیار امنتر از جمعآوری دهها کد آماده از اینترنت و قرار دادن همه آنها در یک فایل است.
جمعبندی؛ فایل .htaccess چیست و چه کاربردی دارد؟
فایل .htaccess یک فایل پیکربندی Apache است که امکان اعمال برخی تنظیمات را در سطح دایرکتوری و زیرشاخههای آن فراهم میکند. از این فایل میتوان برای Redirect، Rewrite URL، کنترل دسترسی، صفحات خطا، برخی Headerها و بسته به Moduleهای فعال، Cache و Compression استفاده کرد.
در سایتهای WordPress که روی Apache اجرا میشوند، .htaccess اهمیت بیشتری دارد؛ زیرا Rewrite Rules مورد استفاده برای Pretty Permalinks میتوانند از طریق آن مدیریت شوند. خراب شدن این قوانین یکی از دلایلی است که ممکن است باعث 404 شدن URLهای وردپرس شود.
از دید سئو سایت نیز اهمیت .htaccess بیشتر از آن است که تصور میشود؛ نه به این دلیل که خود فایل مستقیماً باعث افزایش رتبه میشود، بلکه به دلیل نقش آن در Redirect 301، تغییر دامنه، تغییر ساختار URL، انتقال HTTP به HTTPS و جلوگیری از Redirect Chain.
در عین حال، .htaccess فایلی نیست که بتوان کدهای آماده اینترنت را بدون شناخت سرور داخل آن قرار داد. یک Directive نامعتبر، Syntax اشتباه یا Rewrite نادرست میتواند باعث 500 Internal Server Error، Redirect Loop، 404 شدن صفحات یا مسدود شدن ناخواسته منابع سایت شود.
اگر فایل .htaccess روی سایت شما هیچ اثری ندارد، قبل از تغییر مداوم کدها ابتدا نوع وبسرور و تنظیمات AllowOverride و AllowOverrideList را بررسی کنید. Apache نیز صراحتاً توضیح میدهد که اگر این تنظیمات اجازه استفاده از فایل را ندهند، .htaccess ممکن است کاملاً نادیده گرفته شود.
در نهایت، بهترین رویکرد این است که .htaccess را بخشی از زیرساخت فنی سایت بدانیم، نه محلی برای قرار دادن مجموعهای از کدهای آماده سئو. هر Rule باید بر اساس معماری واقعی سرور، نسخه Apache، Moduleهای فعال، ساختار URL، CDN و نیاز مشخص سایت ایجاد شود.
برای پرشیا وب نیز بررسی و اصلاح .htaccess میتواند بخشی از فرایند سئو تکنیکال و پشتیبانی سایت باشد؛ بهخصوص زمانی که سایت با مشکلاتی مانند 404 شدن صفحات، Redirectهای اشتباه، تغییر دامنه، تغییر ساختار URL، خطای 500 یا ناسازگاری Rewriteها مواجه است.
در چنین شرایطی، بهجای اضافه کردن Ruleهای بیشتر، باید ابتدا علت مشکل شناسایی شود، Backup تهیه شود و سپس کوچکترین تغییر مؤثر اعمال و آزمایش شود.
سؤالات متداول درباره فایل .htaccess
فایل .htaccess چیست؟
.htaccess یک فایل پیکربندی برای Apache است که امکان اعمال برخی تنظیمات را در سطح دایرکتوری و زیرشاخههای آن فراهم میکند.
فایل .htaccess در وردپرس کجاست؟
در بسیاری از سایتهای وردپرسی که روی Apache اجرا میشوند، فایل اصلی در ریشه سایت و معمولاً در مسیری مانند public_html/.htaccess قرار دارد.
چرا فایل .htaccess را در هاست نمیبینم؟
زیرا فایلهایی که با نقطه شروع میشوند معمولاً Hidden هستند. در File Manager گزینه Show Hidden Files را فعال کنید. البته ممکن است فایل اصلاً وجود نداشته باشد.
آیا .htaccess روی Nginx کار میکند؟
خیر. Nginx فایل .htaccess را مانند Apache پردازش نمیکند و تنظیمات آن باید در Configuration خود Nginx انجام شود.
آیا .htaccess روی سئو تأثیر دارد؟
این فایل عامل رتبهبندی مستقیم نیست، اما Redirect، Rewrite، HTTPS و سایر تنظیمات آن میتوانند روی Technical SEO و دسترسی صحیح کاربران و خزندهها تأثیر مهمی داشته باشند.
آیا حذف .htaccess وردپرس باعث خراب شدن سایت میشود؟
ممکن است. اگر سایت روی Apache و با Pretty Permalinks کار کند، حذف Rewrite Rules میتواند باعث 404 شدن URLهای داخلی شود.
چرا بعد از ویرایش .htaccess خطای 500 دریافت میکنم؟
Syntax اشتباه، Directive غیرمجاز، Module غیرفعال، Regex نادرست یا تداخل Ruleها از دلایل رایج هستند. بهترین روش بررسی، Restore کردن Backup و سپس بررسی Error Log Apache است.
آیا قبل از ویرایش .htaccess باید Backup بگیریم؟
بله. به دلیل حساسیت این فایل، همیشه قبل از تغییر یک نسخه از فایل سالم قبلی نگه دارید.
آیا برای تغییر .htaccess باید Apache را Restart کرد؟
در حالت معمول خیر. تغییرات .htaccess در فرآیند درخواست خوانده میشوند و معمولاً نیاز به Restart دستی Apache ندارند.
آیا میتوان Redirect 301 را با .htaccess ایجاد کرد؟
بله. در Apache میتوان Redirectهای سمت سرور را با دستوراتی مانند Redirect 301 یا با mod_rewrite پیادهسازی کرد.