最近发现百度爬虫抓取时在部分url请求参数拼接了“this_erji_yuming”,导致相应的页面服务不可用。 解决思路:增加通用中间件,并在中间件内替换有问题的request参数,需要注意的是,普通参数和路由参数获取及赋值方法不一致,替换路由参数只会改变request->{key}和当前的$routeParams,并未改变request的路由属性,如其他中间件通过getRoutes()重新获取参数依然会有问题。
$params = $request->all();
foreach ($params as $k=>$v){
if(strpos($v,'_this_erji_yuming_') !== false){
$formatValue = str_replace("_this_erji_yuming_","",$v);
request()->offsetSet($k, $formatValue);
}
}
$route = app('router')->getRoutes()->match($request);
$routeParams = $route->parameters();
foreach ($routeParams as $k=>$v){
if(strpos($v,'_this_erji_yuming_') !== false){
$formatValue = str_replace("_this_erji_yuming_","",$v);
request()->route()->setParameter($k,$formatValue);
}
}
|