Laravel仅根路径/index.php可访问,其他URL报404/500错误求助
Laravel 非根路径路由404/500问题(托管环境下.htaccess导致)
核心问题
你的情况是托管环境下Apache未通过.htaccess正确将请求转发给Laravel的index.php,只有直接访问根路径或/index.php时才会触发框架逻辑,其他路由直接被Apache拦截返回错误。
解决方案
1. 替换为Laravel官方标准的public目录.htaccess配置
把项目public目录下的.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>
2. 检查托管环境的Apache配置
- 确认mod_rewrite模块已开启:大部分虚拟主机控制面板(如cPanel)有“Apache模块”选项,找到mod_rewrite勾选开启;无面板则联系主机商确认。
- 确认服务器的
AllowOverride设置为All:若项目放在子目录,对应目录的Apache配置需设置AllowOverride All,否则.htaccess规则不生效。示例配置:
该配置可能需主机商协助调整,部分托管平台允许自行修改配置文件。<Directory "/path/to/your/laravel/public"> AllowOverride All </Directory>
3. 特殊情况:项目未部署在服务器根目录
若Laravel项目未放在服务器web根目录(如public_html/realtor),需在.htaccess的RewriteEngine On之后添加RewriteBase规则:
RewriteBase /realtor/
将/realtor/替换为你的实际子目录路径。
验证方法
修改完.htaccess后,清除Laravel路由缓存(若之前生成过):
php artisan route:clear
随后访问/login等路由测试;若仍有问题,查看服务器错误日志(托管控制面板的“错误日志”模块),定位具体500错误原因(如权限问题、mod_rewrite未开启提示等)。
内容的提问来源于stack exchange,提问作者Aonu
相关产品推荐
相关产品推荐

