Laravel 5.3升级PHP至7.2后出现404错误求助
别着急,升级PHP后出现404通常和服务器配置、缓存或者环境兼容有关,咱们一步步来排查:
检查服务器重写规则(Apache/Nginx)
PHP版本升级后,服务器配置可能被重置,导致Laravel的路由无法正常解析:如果用Apache:先确认
mod_rewrite模块已启用,然后检查项目根目录的.htaccess文件是否存在且配置正确。Laravel默认的.htaccess应该包含以下核心规则:<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>同时要确保Apache虚拟主机配置中设置了
AllowOverride All,允许.htaccess生效。如果用Nginx:检查server块里的
try_files规则是否正确,正确配置应该是:location / { try_files $uri $uri/ /index.php?$query_string; }修改配置后记得重启服务器(
sudo systemctl restart apache2或sudo systemctl restart nginx)。
清除Laravel所有缓存
旧PHP环境生成的缓存文件可能和新环境不兼容,导致路由、配置加载异常。SSH到 staging 服务器,进入项目根目录执行以下命令:php artisan cache:clear php artisan route:clear php artisan config:clear php artisan view:clear这些命令会清空所有缓存文件,让Laravel重新生成适配PHP7.2的缓存内容。
确认服务器根目录指向
public文件夹
有时候升级后,网站根目录可能被误设置为项目根目录而非public文件夹。Laravel的入口文件是public/index.php,如果服务器指向错误的目录,会导致路由无法被正确解析,直接返回404。需要在服务商控制面板里将网站根目录调整为项目下的public文件夹。检查路由文件的PHP语法兼容性
PHP7.2相比7.0对废弃语法、函数的限制更严格,虽然Laravel5.3支持PHP7.1+,但如果你的自定义路由或业务代码里有PHP7.2不兼容的写法(比如使用已废弃的mcrypt函数、过时的语法),可能会导致路由加载失败。可以运行php artisan route:list命令,如果有语法错误,这条命令会直接抛出报错信息,帮你定位问题。查看详细错误日志
你提供的错误日志里应该有更具体的线索,比如是否有PHP扩展缺失(比如PHP7.2不再默认启用mcrypt,而Laravel5.3依赖该扩展,需要手动安装:Ubuntu环境下执行sudo apt-get install php7.2-mcrypt后重启服务器)、代码报错等。同时也可以查看项目storage/logs目录下的Laravel日志,里面会记录框架层面的错误信息,更快定位问题根源。
如果以上步骤都排查过还是不行,可以尝试重新安装依赖:运行composer install(staging环境建议用install而非update,避免依赖版本意外变更),确保所有依赖都适配PHP7.2版本。
内容的提问来源于stack exchange,提问作者Robin

