راهنمای عملی ساخت فایل .htaccess در وردپرس

ساخت فایل .htaccess در وردپرس
فهرست مطالب

چرا «ساخت فایل .htaccess» مهم است؟

اگر می‌خواهید پیوندهای یکتا (Permalinks) در وردپرس درست کار کنند، ریدایرکت‌های صحیح داشته باشید، امنیت پایه را بالا ببرید یا کش/فشرده‌سازی را از سطح وب‌سرور تنظیم کنید، باید ساخت فایل .htaccess را بلد باشید. .htaccess یک فایل پیکربندی توزیع‌شده برای وب‌سرور Apache (و سرورهای مشابه مثل Litespeed) است که کنترل دسترسی، بازنویسی آدرس‌ها (mod_rewrite)، و تنظیمات متفاوت سرور را در سطح پوشه ممکن می‌کند. توجه: Nginx از .htaccess پشتیبانی نمی‌کند—برای Nginx باید قواعد را در فایل پیکربندی سرور (nginx.conf یا سایت‌های موجود) قرار دهید یا معادل‌سازی کنید.

آماده‌سازی: قبل از ساخت فایل .htaccess چه کار کنیم

  1. بکاپ کامل بگیرید. همیشه قبل از ویرایش فایل‌های سیستمی (مثل .htaccess یا wp-config.php) از روت سایت بکاپ بگیرید (فایل + پایگاه داده).
  2. محیط دسترسی: تصمیم بگیرید از طریق cPanel File Manager، FTP/SFTP یا از طریق داشبورد وردپرس → تنظیمات → پیوندهای یکتا (Permalinks) تغییر را انجام می‌دهید. اگر دسترسی SSH دارید، می‌توانید با ویرایشگرهایی مثل nano یا vim هم کار کنید. راه امن برای بازسازی خودکار .htaccess در وردپرس، ذخیرهٔ مجدد پیوندهای یکتا است.
  3. تشخیص وب‌سرور: حتماً بفهمید هاست شما Apache/Litespeed است یا Nginx. چون .htaccess فقط در Apache/Litespeed کار می‌کند. اگر Nginx دارید، قواعد را باید به فرمت Nginx تبدیل و در پیکربندی سرور قرار دهید.

ایجاد یا بازیابی فایل .htaccess (گام‌به‌گام)

روش A — با cPanel (File Manager)

  1. وارد cPanel شوید → File Manager → پوشهٔ روت سایت (معمولاً public_html یا پوشهٔ نصب وردپرس).
  2. اگر فایل .htaccess را نمی‌بینید، تنظیمات File Manager را برای نمایش فایل‌های مخفی (show hidden files) روشن کنید.
  3. اگر موجود نیست: New File → نام فایل را .htaccess بگذارید و ذخیره کنید.
  4. روی فایل راست‌کلیک → Edit → کد مورد نظر را قرار دهید → Save.

روش B — با FTP/SFTP

  1. با نرم‌افزار FTP (مثلاً FileZilla) متصل شوید.
  2. در فولدر روت (public_html) فایل .htaccess را آپلود کنید یا همان‌جا جدید بسازید.
  3. دسترسی فایل معمولاً 644 مناسب است (مالک: خواندن/نوشتن، گروه: خواندن، عمومی: خواندن).

روش C — بازسازی خودکار از وردپرس

  1. وارد وردپرس شوید → تنظیمات → پیوندهای یکتا → بدون تغییر روی Save Changes کلیک کنید؛ وردپرس تلاش می‌کند فایل .htaccess را بازنویسی کند (نیاز به مجوز نوشتن فایل دارد). این روش امن برای بازگرداندن کد پیش‌فرض است.

کد پیش‌فرض وردپرس (قرار دادن به‌عنوان پایه)

این بلوک را به عنوان نقطهٔ شروع در فایل قرار دهید. وردپرس معمولاً بین خط‌های # BEGIN WordPress و # END WordPress نوشته می‌شود:

# 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

این کد مسئول راه‌اندازی پیوندهای یکتا (pretty permalinks) در وردپرس است. اگر این بخش خراب شود، صفحات سایت احتمالاً 404 یا خطای دیگر نشان می‌دهند. برای مرجع رسمی و بازیابی می‌توانید به مستندات وردپرس مراجعه کنید.

ریدایرکت امن: HTTPS و canonical (نمونه‌های پیشنهادی)

توجه: همیشه https:// را به‌جای http:// توصیه کنید و ترجیحا از ریدایرکت 301 برای SEO استفاده کنید.

الف) ریدایرکت همه به HTTPS + بدون www (نمونهٔ کامل)

# Force HTTPS and non-www
<IfModule mod_rewrite.c>
RewriteEngine On

# If not HTTPS or if www present, redirect to https://example.com
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
</IfModule>

این کد هر درخواست را به نسخه HTTPS و بدون www هدایت می‌کند. قبل از قرار دادن، example.com را با دامنه خود بررسی کنید یا از قالب بالا که نام میزبان را خودکار جایگزین می‌کند استفاده کنید. (منبع: نمونه‌های رایج و مباحث فنی درباره forcing https).

ب) ریدایرکت از بدون www به با www (HTTPS)

# Force HTTPS and www
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

نکتهٔ سئو: انتخاب www یا non-www یک تصمیم است؛ مهم این است که روی یک نسخه canonical باقی بمانید و از ریدایرکت 301 استفاده کنید.

قوانین امنیتی حیاتی (نمونه‌ها و توضیح خط‌به‌خط)

در این بخش کدهایی قرار می‌دهم که به‌صورت عملی امنیت سایت را افزایش می‌دهد. همیشه قبل از اعمال تست و بکاپ بگیرید.

1) جلوگیری از مشاهدهٔ فایل‌های سیستمی (.htaccess, wp-config.php)

<FilesMatch "(\.htaccess|wp-config\.php|readme\.html|license\.txt)$">
Order allow,deny
Deny from all
</FilesMatch>

توضیح: جلوگیری از دسترسی مستقیم به فایل‌های حساس از طریق مرورگر.

2) محافظت از wp-config.php (روشی دیگر)

<files wp-config.php>
order allow,deny
deny from all
</files>

3) غیرقابل‌اجرا کردن فایل‌های PHP در پوشه uploads

در داخل /wp-content/uploads/.htaccess قرار دهید:

<FilesMatch "\.php$">
  deny from all
</FilesMatch>

این جلوی اجرای فایل‌های PHP در پوشهٔ آپلودها را می‌گیرد — یک لایهٔ مهم برای جلوگیری از backdoor های آپلود شده توسط مهاجمین. منابع راهنما و مقالات امنیتی نیز این روش را توصیه می‌کنند.

4) جلوگیری از فهرست‌شدن دایرکتوری‌ها

Options -Indexes

5) مسدودسازی بر اساس IP یا User-Agent (نمونه)

<RequireAll>
Require all granted
Require not ip 1.2.3.4
Require expr %{REQUEST_HEADERS}['User-Agent'] !~ /BadBot/i
</RequireAll>

(در آپاچی‌های جدید از Require استفاده می‌شود؛ اگر سرورتان نسخهٔ قدیمی‌تر است، شکل دیگری از قواعد ممکن است لازم باشد.)

کش و فشرده‌سازی (نمونه‌های ساده)

فعال‌سازی gzip

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/javascript application/json
</IfModule>

تنظیم زمان کش مرورگر (expires)

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/gif "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"
</IfModule>

این قواعد باعث کاهش بار سرور و بهبود سرعت می‌شوند — بخشی از بهترین‌روش‌های عملکردی برای سئو و UX.

معادل Nginx برای قواعد رایج

یادتان باشد Nginx .htaccess را ارزیابی نمی‌کند؛ باید قواعد را به فرمت Nginx تبدیل کنید و در بخش server { ... } قرار دهید. مستندات رسمی Nginx راهنما و مثال‌هایی برای تبدیل ارائه داده‌اند. نمونهٔ ساده ریدایرکت به HTTPS + non-www در Nginx:

server {
    listen 80;
    server_name www.example.com example.com;
    return 301 https://example.com$request_uri;
}

برای تبدیل قواعد mod_rewrite پیچیده، بهتر است از مستندات تبدیل یا ابزارهای تبدیل استفاده کنید و بعد تست کنید.

تست، بازگردانی و خطایابی (گام‌های عملی)

  1. قبل از آپلود: کد را در یک ویرایشگر متنی تست کنید؛ یک اشتباه کوچک (مثلاً حذف #END) می‌تواند سایت را به‌هم بزند.
  2. محیط تست: اگر امکان دارد روی محیط لوکال (LocalWP یا XAMPP) یا یک زیر دامنه (staging) تست کنید.
  3. پشتیبان: قبل از هر تغییر، یک کپی از .htaccess و فایل‌های مهم ذخیره کنید.
  4. لاگ‌ها: اگر سایت خطا داد، به لاگ‌های Apache (error_log) نگاه کنید؛ خطا معمولاً نشان می‌دهد کدام خط مشکل دارد.
  5. چک لیست سریع خطایابی:
    • آیا mod_rewrite فعال است؟
    • آیا فایل با اجازهٔ نوشتن توسط وب‌سرور ذخیره شده؟
    • پس از اعمال تغییر، حافظهٔ کش (Cache) و CDN را پاک کنید.

سناریوهای واقعی و مثال کاربردی (جدول مقایسه)

نیازکد نمونهتذکر
بازگردانی پیوندهای یکتاکد پیش‌فرض وردپرساز Save Permalinks استفاده کنید.
ریدایرکت به HTTPS و non-wwwمثال ریدایرکت 301 بالامناسب برای SEO (301).
جلوگیری از اجرای PHP در uploads<FilesMatch "\.php$"> deny from all </FilesMatch>درون /wp-content/uploads قرار گیرد.
فعال‌سازی gzipmod_deflate snippetنیاز به ماژول سرور دارد.
معادل برای Nginxقرار در server{}.htaccess در Nginx کار نمی‌کند.

جمع‌بندی و بهترین روند کاری (Checklist نهایی)

  1. تشخیص وب‌سرور (Apache/Litespeed یا Nginx).
  2. ساخت/ویرایش .htaccess در public_html یا بازسازی از طریق Permalinks.
  3. قرار دادن کد پیش‌فرض وردپرس به‌عنوان پایه.
  4. افزودن ریدایرکت‌های HTTPS/canonical (با احتیاط).
  5. اضافه کردن قوانین امنیتی (محافظت wp-config، جلوگیری اجرای PHP در uploads).
  6. تست در staging و گرفتن بکاپ.
  7. پاک کردن کش و بررسی لاگ در صورت خطا.

5/5 - (1 امتیاز)
Picture of پارسا مجیدی
پارسا مجیدی
زندگی من یه جورایی مثل یه اپلیکیشنه که همیشه تو پس‌زمینه در حال اجراست. از طراحی سایت و سئو گرفته تا خلق ایده‌هایی که درآمد غیرفعال بسازن، همه‌شون بخشی از این اپلیکیشنن. هر روز در حال آپدیت و یادگیریم تا دنیای آنلاین رو به یه جایی برسونم که دیده بشی، بفروشی و رشد کنی. داستان من و تکنولوژی؟ هنوز در حال "لود" شدنه...
اشتراک
اطلاع از
guest
1 دیدگاه
جدیدترین
قدیمی ترین بیشترین آرا
بازخورد درون خطی
مشاهده همه نظرات
عضو شوید و همه محصولات را رایگان دانلود کنید!!!
1
0
نظر خود را به اشتراک بگذاریدx