Laravel 5.8重定向至外部URL触发404错误求助
/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




