رفع خطای 404 وردپرس؛ وقتی نوشتهها و برگهها باز نمیشوند چه کنیم؟
یکی از حالتهای آزاردهنده در وردپرس این است که صفحه اصلی سایت بدون مشکل باز میشود، اما همین که روی یک نوشته، برگه یا حتی محصول کلیک میکنید با خطای 404 Not Found روبهرو میشوید.
در چنین شرایطی معمولاً خود محتوا حذف نشده است. خیلی وقتها نوشته هنوز داخل پیشخوان وردپرس وجود دارد، اما آدرسدهی سایت درست کار نمیکند. تنظیمات پیوند یکتا، فایل .htaccess، کش یا تنظیمات وبسرور از اولین چیزهایی هستند که باید بررسی شوند.
خطای 404 در وردپرس دقیقاً یعنی چه؟
خطای 404 یعنی سرور صفحهای را که کاربر درخواست کرده در آن آدرس پیدا نکرده است.
مثلاً کاربر این آدرس را باز میکند:
example.com/sample-post
اگر سرور نتواند درخواست را به نوشته مربوطه برساند، صفحه 404 نمایش داده میشود.
نکته اینجاست که در وردپرس، 404 لزوماً به معنی حذف شدن نوشته نیست. ممکن است نوشته کاملاً سالم و منتشرشده باشد، اما مشکل از ساختار URL یا قوانین Rewrite سایت باشد.
اگر صفحه اصلی باز میشود ولی نوشتهها 404 میدهند، از اینجا شروع کنید
قبل از اینکه سراغ فایلهای هاست یا تنظیمات پیچیدهتر بروید، وارد پیشخوان وردپرس شوید و مسیر زیر را باز کنید:
تنظیمات ← پیوندهای یکتا
در این صفحه لازم نیست چیزی را عوض کنید. فقط روی ذخیره تغییرات بزنید.
همین کار ساده باعث میشود وردپرس قوانین مربوط به آدرسدهی صفحات را دوباره ایجاد کند و در بسیاری از مواقع مشکل همانجا حل میشود.
اگر بعد از این مرحله هنوز نوشتهها باز نمیشوند، آن وقت بررسی .htaccess منطقی است.
فایل .htaccess را بررسی کنید
اگر سایت روی سرور Apache اجرا میشود، وردپرس برای مدیریت پیوندهای یکتا از فایل .htaccess استفاده میکند.
این فایل معمولاً در پوشه اصلی وردپرس قرار دارد؛ همان مسیری که فایلهای اصلی سایت و پوشه wp-content را میبینید.
در بیشتر هاستها مسیرش چیزی شبیه این است:
public_html/.htaccess
اگر این فایل حذف شده باشد، محتوایش بههم خورده باشد یا وردپرس نتواند آن را بهروزرسانی کند، ممکن است صفحه اصلی سایت باز شود ولی لینک نوشتهها و برگهها 404 بدهند.
قبل از ویرایش، بکاپ بگیرید
قبل از هر تغییری روی .htaccess یک نسخه از فایل فعلی نگه دارید.
کد معمول وردپرس در این فایل به شکل زیر است:
# 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 خالی است یا قوانین وردپرس داخل آن وجود ندارد، بعد از تهیه بکاپ میتوانید این بخش را بررسی و در صورت نیاز اصلاح کنید.
بعد از ذخیره تغییرات هم بهتر است سایت را در حالت ناشناس مرورگر باز کنید یا کش را پاک کنید تا نسخه قدیمی صفحه جلوی تست شما را نگیرد.
سطح دسترسی .htaccess هم مهم است
گاهی فایل وجود دارد و محتوایش هم درست به نظر میرسد، اما وردپرس اجازه تغییر آن را ندارد.
سطح دسترسی رایج برای .htaccess مقدار 644 است. اگر به ترمینال دسترسی دارید، با این دستور میتوانید وضعیت فایل را ببینید:
ls -l .htaccess
در صورت نیاز، تنظیم دسترسی روی 644 با این دستور انجام میشود:
chmod 644 .htaccess
قرار دادن دسترسی 777 روی این فایل راهحل مناسبی نیست و از نظر امنیتی هم میتواند مشکلساز شود.
مشکل حل شده ولی هنوز 404 میبینید؟ کش را فراموش نکنید
گاهی تنظیمات را اصلاح کردهاید، اما مرورگر یا سیستم کش هنوز نسخه قدیمی خطا را نشان میدهد.
در این وضعیت این موارد را پاک یا بررسی کنید:
کش افزونههایی مثل LiteSpeed Cache یا WP Rocket
کش مرورگر
کش CDN مثل Cloudflare
کش سرور یا هاست
مخصوصاً بعد از تغییر Permalink یا .htaccess، تست مجدد بدون پاک کردن کش میتواند شما را به اشتباه بیندازد.
افزونهای نصب یا آپدیت کردهاید؟
اگر خطای 404 دقیقاً بعد از نصب یا بهروزرسانی یک افزونه شروع شده، همان افزونه ارزش بررسی دارد.
افزونههای ریدایرکت، کش، امنیت، تغییر آدرس ورود، چندزبانه و حتی بعضی افزونههای سئو میتوانند روی مسیرهای سایت اثر بگذارند.
برای تست، افزونه مشکوک را موقتاً غیرفعال کنید و لینک نوشتهها را دوباره باز کنید.
اگر حتی به پیشخوان وردپرس هم دسترسی ندارید، از File Manager هاست وارد این مسیر شوید:
wp-content/plugins
بعد نام پوشه افزونه مشکوک را موقتاً تغییر دهید تا افزونه غیرفعال شود.
فقط یک نوشته 404 میدهد؟
اگر مشکل روی همه نوشتهها نیست و فقط یک صفحه خاص باز نمیشود، احتمال دارد ایراد از خود همان نوشته باشد.
این موارد را بررسی کنید:
نوشته حذف نشده باشد
داخل زبالهدان نباشد
وضعیت آن روی «منتشر شده» باشد
Slug یا نامک آن تغییر نکرده باشد
به آدرس دیگری ریدایرکت نشده باشد
در این حالت بهتر است مستقیماً وارد ویرایش همان نوشته شوید و بخش پیوند یا نامک را بررسی کنید.
روی Nginx هستید؟ .htaccess را دستکاری نکنید
اگر سایت شما روی Nginx اجرا میشود، .htaccess کاربردی ندارد.
در Nginx قوانین مربوط به آدرسدهی باید داخل کانفیگ سرور تنظیم شوند. یک نمونه رایج برای وردپرس به این شکل است:
location / {
try_files $uri $uri/ /index.php?$args;
}
اگر هاست اشتراکی دارید، معمولاً به این کانفیگ دسترسی ندارید. در این شرایط بهتر است از پشتیبانی هاست بخواهید تنظیمات Rewrite وردپرس را بررسی کند.
روی VPS یا سرور اختصاصی هم قبل از تغییر کانفیگ Nginx، از فایل تنظیمات بکاپ بگیرید و بعد از تغییر، کانفیگ را تست کنید.
برای رفع 404 سراغ این کارها نروید
در زمان رفع مشکل، بعضی تغییرات میتوانند اوضاع را بدتر کنند.
مثلاً پاک کردن .htaccess بدون بکاپ یا قرار دادن دسترسی 777 روی فایلها و پوشهها کار درستی نیست. حذف عجولانه افزونهها، تغییر آدرس سایت بدون اطمینان و نادیده گرفتن کش سایت و CDN هم میتواند عیبیابی را سختتر کند.
قبل از هر تغییر مهم روی فایلها یا تنظیمات سایت، از فایلها و دیتابیس بکاپ داشته باشید.
در نهایت، مشکل را به این ترتیب بررسی کنید
اگر بخواهیم مسیر عیبیابی را کوتاه کنیم، اول پیوندهای یکتا را دوباره ذخیره کنید.
اگر جواب نداد، .htaccess را بررسی کنید. بعد از آن کش و افزونههای مشکوک را چک کنید.
اگر سایت روی Nginx است، بهجای دستکاری .htaccess باید تنظیمات Rewrite سرور بررسی شود.
چند سؤال رایج
چرا صفحه اصلی سایت باز میشود اما نوشتهها 404 میدهند؟
این حالت معمولاً به پیوندهای یکتا یا فایل .htaccess مربوط است. اولین کار این است که وارد تنظیمات پیوندهای یکتا شوید و آنها را دوباره ذخیره کنید.
برای رفع 404 لازم است افزونه نصب کنم؟
در بیشتر موارد نه. قبل از نصب هر افزونهای، پیوندهای یکتا، .htaccess و کش سایت را بررسی کنید.
خطای 404 روی سئو تأثیر دارد؟
اگر صفحات مهم سایت برای مدت طولانی با خطای 404 در دسترس باشند، میتواند روی تجربه کاربر و عملکرد سئوی سایت تأثیر منفی بگذارد.
.htaccess روی همه سرورها وجود دارد؟
خیر. .htaccess بیشتر در سرورهای Apache کاربرد دارد. در Nginx، قوانین Rewrite باید از طریق کانفیگ سرور تنظیم شوند.
