You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Laravel 5.8重定向至外部URL触发404错误求助

解决Laravel路由/Documents重定向404的问题

嘿,我来帮你捋捋这个问题!首先出现404说明你的/Documents路由根本没被Laravel正确处理,先从几个最常见的排查点入手:

  • 先清路由缓存!
    Laravel的路由缓存会导致新增/修改的路由不生效,这是最容易踩的坑。运行这两个命令试试:

    php artisan route:clear
    php artisan config:clear
    

    清完缓存再访问/Documents看看有没有变化。

  • 检查路由顺序
    打开你的路由文件(一般是routes/web.php),看看Route::get('Documents', ...)是不是放在了通配路由或者其他更宽泛的路由后面?比如如果有Route::get('{any}', ...)这种路由在它前面,Laravel会优先匹配通配路由,导致你的Documents路由永远不会被触发。一定要把具体的路由放在通配路由前面

  • 大小写匹配问题
    你访问的是/Documents首字母大写,而服务器或者Laravel的路由匹配可能存在大小写敏感的情况。可以试试把路由改成小写的documents,或者测试访问/documents看看能不能触发重定向。如果服务器配置了URL转小写(比如Apache的mod_speling模块),也可能导致大写的路径找不到对应的路由。

  • 确认服务器请求转发配置
    不管是Nginx还是Apache,都要确保所有请求都转发到Laravel的public/index.php,而不是让服务器直接去查找物理文件/目录。比如Nginx的配置里需要有:

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    

    如果服务器直接去寻找Documents这个物理目录(而不是交给Laravel处理),自然会返回404,因为你的服务器上并没有这个目录。

  • 先测试最简路由
    先把重定向代码换成最简单的返回,确认路由能被正常访问:

    Route::get('Documents', function () {
        return "测试路由生效!";
    });
    

    访问/Documents如果能看到这个字符串,说明路由本身没问题,你试过的几种redirect()写法都是有效的;如果还是404,那就要回到前面的缓存、路由顺序、服务器配置继续排查。

  • 查看已注册路由列表
    运行php artisan route:list,看看输出里有没有GET|HEAD Documents这条路由。如果没有,说明路由根本没被注册,检查是不是路由文件写错了,或者有没有在其他地方(比如路由组、其他路由文件)覆盖了这个路由。


内容的提问来源于stack exchange,提问作者Geoff_S

火山引擎 最新活动