سلام دوستان! احتمالاً شما هم هنگام کار با پروژههای لاراول به خطای 404 برخورد کردید. این خطا زمانی پیش میآید که سرور نتواند صفحهای که درخواست کردید را پیدا کند. اما شاید بپرسید چرا به جای صفحه پیشفرض خطای 404 لاراول، صفحه خطای 404 PHP نمایش داده میشود. برای رفع این مشکل، چند مرحله ساده وجود دارد که با هم بررسی میکنیم.
اولین دلیل معمول این مشکل میتواند تنظیمات نادرست فایل .htaccess
باشد. این فایل مسئول هدایت درخواستها به فایل index.php
لاراول است. اگر این فایل به درستی تنظیم نشده باشد، ممکن است خطاهای 404 رخ دهند. اطمینان حاصل کنید که این فایل به طور صحیح تنظیم شده است.
دلیل دیگر میتواند به خاطر پیکربندی نادرست وبسرور (مانند Apache یا Nginx) باشد. برای مثال، در تنظیمات Nginx باید مطمئن شوید که درخواستها به فایل index.php
هدایت میشوند. در فایل تنظیمات Nginx، خطوط مربوط به try_files
باید به درستی تنظیم شده باشند.
سومین دلیل میتواند به خاطر پاک نشدن کش لاراول باشد. گاهی اوقات تغییرات لازم را ایجاد میکنید، اما کش قدیمی باعث میشود که تغییرات اعمال نشوند. در چنین مواردی، دستور php artisan cache:clear
میتواند نجاتدهنده باشد.
در آخر، همیشه اطمینان حاصل کنید که دستور composer install
را اجرا کردهاید و تمامی فایلهای وابستگیهای لاراول به درستی نصب شدهاند. گاهی اوقات ممکن است مشکل از عدم وجود یکی از این فایلها باشد.
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
کد بالا قسمتهایی از فایل .htaccess
است که برای هدایت صحیح درخواستها در لاراول استفاده میشود.
"<IfModule mod_rewrite.c>
": بررسی میکند که آیا ماژول mod_rewrite
فعال است یا خیر.
"Options +FollowSymLinks
": این گزینه دنبال کردن لینکهای نمادین را فعال میکند.
"RewriteEngine On
": فعالسازی موتور بازنویسی آدرسها.
"RewriteRule ^(.*)/$ /$1 [L,R=301]
": این خط تمام آدرسهایی که به / ختم میشوند را به آدرس بدون / هدایت میکند.
"RewriteCond %{REQUEST_FILENAME} !-d
" و "RewriteCond %{REQUEST_FILENAME} !-f
": بررسی میکند که آیا فایل یا دایرکتوری با نام درخواست شده وجود ندارد.
"RewriteRule ^ index.php [L]
": تمامی درخواستها را به index.php
هدایت میکند.