Laravel路由返回错误:Apache下访问路由出现404“对象未找到”
兄弟,我之前在Arch系系统上部署Laravel也踩过这个路由404的坑,给你捋几个关键排查点,你一个个来:
先确认mod_rewrite模块是否启用:Laravel的路由重写完全依赖这个Apache模块,Arch/Manjaro下启用命令很简单:
sudo a2enmod rewrite启用后一定要重启Apache:
sudo systemctl restart httpd.service把文档根目录改回Laravel的public文件夹:你之前改成项目根目录能访问首页,但这是错误的做法——Laravel的入口文件是
public/index.php,所有请求都得经过这个文件才能被路由处理。所以Apache的站点配置里,DocumentRoot必须指向/path/to/your-laravel-project/public,而不是项目根目录。检查站点配置里的Directory权限设置:打开你的Apache站点配置文件(一般在
/etc/httpd/conf.d/下的.conf文件,或者/etc/httpd/conf/extra/httpd-vhosts.conf),确保对应public目录的配置块是这样的:<Directory "/path/to/your-laravel-project/public"> AllowOverride All Require all granted Options FollowSymLinks MultiViews </Directory>这里的
AllowOverride All必须明确写在这个Directory块里,只改全局配置有时候会不生效。确认public目录下的.htaccess文件存在且内容正确:Laravel默认会在public目录生成这个文件,如果不小心删了,手动创建一个,内容如下:
<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>修正Laravel目录的权限:Arch系的Apache运行用户是
http,不是Debian系的www-data,所以要给这个用户赋予Laravel关键目录的写入权限:sudo chown -R $USER:http /path/to/your-laravel-project sudo chmod -R 755 /path/to/your-laravel-project/storage sudo chmod -R 755 /path/to/your-laravel-project/bootstrap/cache最后检查.env文件的APP_URL:确保
APP_URL设置和你访问的地址一致,比如:APP_URL=http://127.0.0.1
做完这些步骤后,重启Apache,再试试访问你的路由,应该就能正常工作了!
内容的提问来源于stack exchange,提问作者ICP

