یکی از رایجترین مشکلاتی که بعد از انتقال سایت وردپرسی به هاست جدید، تغییر دامنه یا جابهجایی سرور پیش میآید، ارور 404 صفحه یافت نشد (404 Not Found) است. در این مقاله، ۷ راه حل واقعی و گامبهگام را آموزش میدهم که ۹۹٪ مواقع مشکل را حل میکند.
🔍 علت ارور 404 بعد از انتقال سایت چیست؟
ارور 404 در وردپرس معمولاً به این معناست که سیستم بازنویسی لینکها (Permalinks) به درستی کار نمیکند. دلیل اصلی آن هم معمولا فایل .htaccess است که بعد از انتقال سایت یا پاک شده، یا دسترسی نوشتن روی آن وجود ندارد، یا محتوای آن اشتباه است.
سایر دلایل احتمالی:
- ❌ ماژول
mod_rewriteدر هاست جدید فعال نیست - ❌ تنظیمات Permalink به هم ریخته است
- ❌ خطا در انتقال فایلها (مخصوصاً فایل
.htaccess) - ❌ مشکل در تنظیمات Virtual Host یا Nginx
✅ راه حل اول: ساده اما طلایی – ذخیره مجدد تنظیمات پرملینک
این روش در بیش از ۵۰٪ موارد مشکل را حل میکند.
- وارد پیشخوان وردپرس شوید.
- به مسیر تنظیمات → پیوندهای یکتا (Settings → Permalinks) بروید.
- بدون تغییر هیچ گزینهای، پایین صفحه را اسکرول کرده و روی ذخیره تغییرات (Save Changes) کلیک کنید.
- سایت خود را بررسی کنید.
🔹 این کار باعث میشود وردپرس فایل .htaccess را بازنویسی کند (اگر دسترسی نوشتن داشته باشد).
✅ راه حل دوم: بررسی و بازسازی دستی فایل .htaccess
اگر روش اول جواب نداد، احتمالاً دسترسی نوشتن روی فایل .htaccess وجود ندارد یا این فایل وجود ندارد.
مرحله 1: اتصال به هاست با FTP یا File Manager
وارد public_html یا ریشه سایت خود شوید.
مرحله 2: پیدا کردن فایل .htaccess
دنبال فایل .htaccess بگردید. اگر وجود ندارد، یک فایل جدید بسازید. اگر وجود دارد، از آن بکآپ بگیرید.
مرحله 3: افزودن کد پیشفرض وردپرس
محتوای زیر را داخل .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
مرحله 4: تنظیم دسترسی نوشتن (Permission)
فایل .htaccess را روی 644 یا 755 تنظیم کنید.
بعد از این کار، دوباره تنظیمات → پیوندهای یکتا را ذخیره کنید.
✅ راه حل سوم: فعال بودن mod_rewrite در هاست
گاهی هاست جدید شما ماژول mod_rewrite آپاچی را غیرفعال دارد.
برای بررسی: یک فایل info.php با محتوای زیر بسازید و از طریق مرورگر باز کنید:
<?php phpinfo(); ?>
در صفحه باز شده، عبارت mod_rewrite را جستجو کنید. اگر نبود، باید با پشتیبانی هاست تماس بگیرید تا آن را فعال کنند.
✅ راه حل چهارم: بررسی AllowOverride در هاست
اگر هاست شما از Apache استفاده میکند، ممکن است تنظیم AllowOverride None باشد که باعث میشود .htaccess نادیده گرفته شود.
این مشکل معمولاً در سرورهای اختصاصی یا VPS دیده میشود. باید در فایل httpd.conf یا apache2.conf مقدار AllowOverride را به All تغییر دهید و سپس آپاچی را ریستارت کنید.
✅ راه حل پنجم: مخصوص سرورهای Nginx
اگر از سرور Nginx استفاده میکنید، فایل .htaccess کار نمیکند (Nginx از .htaccess پشتیبانی نمیکند). باید تنظیمات بازنویسی را مستقیماً در کانفیگ Nginx اضافه کنید:
location / {
try_files $uri $uri/ /index.php?$args;
}
بعد از اضافه کردن، Nginx را ریستارت کنید:
sudo systemctl restart nginx
✅ راه حل ششم: غیرفعال کردن موقت پلاگینها
گاهی یک پلاگین کش یا پلاگین امنیت باعث تداخل در بازنویسی لینکها میشود.
- همه پلاگینها را غیرفعال کنید (از طریق phpMyAdmin یا با تغییر نام پوشه
plugins). - تنظیمات پرملینک را دوباره ذخیره کنید.
- سایت را چک کنید. اگر مشکل حل شد، پلاگینها را یکییکی فعال کنید تا پلاگین مشکلدار پیدا شود.
✅ راه حل هفتم: آپدیت گزینه siteurl و home در دیتابیس
اگر بعد از انتقال سایت، آدرس دامنه تغییر کرده، ممکن است این مقادیر در دیتابیس اشتباه باشند.
- وارد phpMyAdmin شوید.
- دیتابیس وردپرس خود را انتخاب کنید.
- به جدول
wp_optionsبروید (پیشوند ممکن است متفاوت باشد). - دو ردیف
siteurlوhomeرا پیدا کنید. - مقادیر آنها را به آدرس صحیح جدید سایت تغییر دهید.
⚠️ نکته مهم: اگر دامنه تغییر نکرده، این مرحله را انجام ندهید.
📋 جمعبندی سریع: راهحلهای رفع ارور 404
| ردیف | راه حل | زمان تقریبی | سختی |
|---|---|---|---|
| ۱ | ذخیره مجدد تنظیمات پرملینک | ۱ دقیقه | خیلی آسان |
| ۲ | بازسازی فایل .htaccess | ۵ دقیقه | آسان |
| ۳ | فعالسازی mod_rewrite | نیاز به پشتیبانی | متوسط |
| ۴ | بررسی AllowOverride | نیاز به دسترسی سرور | حرفهای |
| ۵ | تنظیم Nginx | ۵ دقیقه | متوسط |
| ۶ | غیرفعال کردن پلاگینها | ۲ دقیقه | آسان |
| ۷ | بررسی siteurl و home در دیتابیس | ۳ دقیقه | متوسط |
❓ سوالات متداول (FAQ)
۱ – چرا فقط صفحه اصلی سایت کار میکند اما صفحات داخلی ارور 404 میدهند؟
دقیقاً نشانه مشکل در بازنویسی لینکها (Permalinks) است. روشهای ۱ و ۲ معمولاً این مشکل را حل میکنند.
۲ – آیا بعد از انتقال سایت از هاست لینوکس به ویندوز این مشکل پیش میآید؟
بله. هاستهای ویندوز از .htaccess پشتیبانی نمیکنند. باید از web.config استفاده کنید یا به هاست لینوکسی مهاجرت کنید.
۳ – چگونه بفهمم مشکل از هاست است یا سایت؟
یک فایل test.html ساده در root سایت بسازید. اگر آن فایل باز شد اما صفحات وردپرسی 404 داد، مشکل از بازنویسی وردپرس است. اگر test.html هم 404 داد، مشکل از تنظیمات هاست است.
۴ – آیا پلاگین خاصی برای راحتتر حل کردن این مشکل وجود دارد؟
بله، پلاگینهایی مثل Permalink Manager یا Rewrite Rules Inspector میتوانند کمک کنند، اما بهتر است ابتدا روشهای دستی را امتحان کنید.
✅ اگر تمام روشهای بالا را امتحان کردید و مشکل حل نشد، احتمالاً مشکل از تنظیمات سرور مجازی (Virtual Host) یا DNS است. در این صورت با پشتیبانی هاست خود تماس بگیرید.
🎯 کدام راه حل برای من مناسب است؟
اگر به تازگی سایت را انتقال دادهاید و با ارور 404 مواجه شدهاید، به ترتیب زیر پیش بروید:
- ابتدا روش اول (ذخیره مجدد پرملینک) را امتحان کنید.
- اگر جواب نگرفتید، روش دوم (بررسی و بازسازی .htaccess) را انجام دهید.
- اگر هاست شما Nginx است، به سراغ روش پنجم بروید.
- در غیر این صورت، پلاگینها را غیرفعال کنید (روش ششم).
- آخرین گزینه، بررسی دیتابیس و سپس تماس با پشتیبانی هاست است.