我正在编写一个PHP Laravel中间件,在其中我想使用404s垂直重定向URL,例如,我有一个URL
aa / bb / cc
我想先检查网址是否健康,如果该网址为404,请向上移动
aa / bb
如果还给我404,请进一步移动到根
aa
。
我可以使用此curl功能检查404
public function checkUrl($url)
{
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_NOBODY, true);
// curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);
/* Check for 404 (file not found). */
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
curl_close($handle);
if($httpcode == "404")
return FALSE;
else
return TRUE;
}
但是我担心的是curl命令每次迭代都会花费时间,因此应该使用的最佳方法是什么。这是我当前的实现方式
public function handle($request, Closure $next, $guard = null)
{
if($request->route()->uri() == "{aa}/{bb}/{cc}"){
$checkurl = TRUE;
$checkurl = checkUrl("{aa}/{bb}/{cc}");
if($checkurl == FALSE)
{
$checkurl = checkUrl("{aa}/{bb}");
if($checkurl == FALSE)
{
return redirect("{aa}",301);
}
else
{
return redirect("{aa}/{bb}",301);
}
}
return $next($request);
}