我想制作SEO友好的URL,使用php将查询字符串映射到实际不友好的URL,但我想使用有意义的文件夹名称。我想要以下映射
sport/football/england/premier-league/arsenal -> /team.php?id=arsenal
sport/football/spain/la-liga/barceona -> /team.php?id=barceona
现在显然我可以创建一个忽略文件夹的重写规则,但我不希望它与无效组合一起使用。所以这应该发生。
sport/football/spain/laliga/arsenal -> 404
有没有公认的技术可以做到这一点?我是否只需要为.htaccess或web.config中的每个可能的URL重写数千条重写规则?或者我可以在着陆页数据库中创建一个映射到实际URL的表吗?
答案 0 :(得分:1)
如果您想使用php脚本执行此操作,我会使用正则表达式。
你必须拥有一个阵列才能将球队与联盟等联系起来。 如果你想关联所有的父目录,比如团队与联赛,联盟与国家有运动等国家的阵列和正则表达式会更加复杂。
我能写的一个简单例子是:
<?php
$key = explode('/', $_SERVER['REQUEST_URI'])[4];
$redir = explode('/', $_SERVER['REQUEST_URI'])[5];
$array = array('laliga' => array('a', 'b', 'c', 'd'), 'primera' => array('e', 'f', 'g', 'h'));
$reg = '/('.$key.')/(';
for($i=0; $i<sizeof($array[$key])-1; $i++)
{
if($i != sizeof($array[$key])-1)
{
$reg .= $array[$key][$i].'|';
} else{
$reg = $reg.''.$array[$key][$i];
}
}
$reg .= ')/';
if(preg_match($reg, $_SERVER['REQUEST_URI']))
{
header('Location: team.php?id='.$redir);
} else {
header('Location: 404.html');
}
?>
如果出现问题,请纠正我。
祝你好运