Страницы возвращают 404, кроме главной

Сентябрь, 2022

не работает ЧПУ, не работают роуты

# Причина

В Laravel используется единая точка входа для запросов, поэтому web-сервер должен правильно передавать входные параметры в index.php

Следовательно, если работает только главная страница, а остальные нет, то web-сервер неверно передаёт запрос.

# Кэш

Посмотреть доступные маршруты можно командой: php artisan route:list

Очистить кэш: php artisan route:clear

# Apache

Правила для ЧПУ описываются в .htaccess , причины по которым они могут не работать:

# mod_rewrite

Не установлен или отключён mod_rewrite

Посмотреть загруженные модули можно командой:

1apachectl -M
highlight by torchlight.dev

Активировать модуль:

1sudo a2enmod rewrite
2sudo service apache2 restart
highlight by torchlight.dev

# AllowOverride

Директива AllowOverride имеет значение None для директории проекта, что отключает чтение .htaccess

Значение должно быть All

1# /etc/apache2/apache2.conf
2<Directory /var/www/>
3 AllowOverride All
4</Directory>
highlight by torchlight.dev

Обрати внимание на путь, нужен тот, где находится твой проект. Тоже самое можно указать в конфигурации самого хоста, а не основного конфига.

Не забудь перезапустить apache после изменений в конфигурации. Быстро проверить, что .htaccess используется можно добавив в него любую синтаксическую ошибку, если получим 500 ошибку, то файл используется, иначе игнорируется.

# .htaccess

Правки в .htaccess, которые изменили поведение по умолчанию. Сравни свой файл с оригинальным .

RewriteEngine должен иметь значение On, а запросы направляться в index.php:

1RewriteCond %{REQUEST_FILENAME} !-d
2RewriteCond %{REQUEST_FILENAME} !-f
3RewriteRule ^ index.php [L]
highlight by torchlight.dev

# Nginx

Для Nginx в документации есть раздел с примером конфигурации. Обрати внимание на try_files в секции location /:

1location / {
2 try_files $uri $uri/ /index.php?$query_string;
3}
highlight by torchlight.dev

Какие-либо изменения в данной строке могут повлиять на правильную работу, поэтому попробуй использовать в точности как в документации.