Laravel 5.4 路由允许任意参数失效问题求助
我帮你梳理几个最可能导致这个通配路由失效的原因,你可以逐一排查:
命名空间拼写错误:
看你在RouteServiceProvider.php的mapExampleRoutes方法里,命名空间写的是$this->namespace.'\Examle'——这里的Examle少了一个字母p,应该是Example!虽然你当前用的是闭包路由,命名空间错误暂时不会影响控制器加载,但这是明显的语法错误,先修正它避免后续出问题。路由顺序问题:
Laravel路由是从上到下匹配的,检查routes/example.php里的路由定义顺序,如果这个通配路由/{any}的前面还有其他具体路由(比如Route::get('/test', ...)),那访问/example/test会优先匹配前面的具体路由,而不是这个通配路由。确保这个通配路由放在example.php里所有路由的最后面。路由缓存导致修改不生效:
如果你之前运行过php artisan route:cache生成了路由缓存,那后续修改路由文件的内容不会实时生效,Laravel会直接读取缓存的路由配置。解决方法是运行:php artisan route:clear清除路由缓存后再测试。
中间件拦截请求:
你的路由分组使用了middleware('example'),检查这个自定义中间件的逻辑:是不是在处理请求的时候提前返回了响应(比如重定向、返回错误),导致请求没走到闭包路由里。可以临时注释掉中间件,测试路由是否正常,来排查是不是中间件的问题。访问路径错误:
因为你的路由分组加了prefix('example'),所以这个通配路由的实际访问路径是/example/任意内容,比如/example/test、/example/abc/123,而不是直接访问根路径下的/任意内容。确认你访问的路径是正确的前缀路径。
内容的提问来源于stack exchange,提问作者fumi

