You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:45:03