将php urls映射到文件夹以查询字符串

时间:2018-01-13 11:44:10

标签: php url-rewriting seo

我想制作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的表吗?

1 个答案:

答案 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');
}
?>

如果出现问题,请纠正我。

祝你好运