将带有文件夹的php URL映射到查询字符串

将带有文件夹的php URL映射到查询字符串,php,url-rewriting,seo,Php,Url Rewriting,Seo,我想让搜索引擎优化友好的网址映射到实际不友好的网址与查询字符串使用php,但我想使用有意义的文件夹名称。我想要以下映射 sport/football/england/premier-league/arsenal -> /team.php?id=arsenal sport/football/spain/la-liga/barceona -> /team.php?id=barceona 现在很明显,我可以创建一个重写规则,忽略文件夹,但我不希望它处理无效的组合。所以这应该发生 spor

我想让搜索引擎优化友好的网址映射到实际不友好的网址与查询字符串使用php,但我想使用有意义的文件夹名称。我想要以下映射

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的表吗?

如果您想用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');
}
?>

如果有什么问题,请纠正我


祝你好运

我不认为这太宽泛,它用一种特定的语言提出了一个相当具体的问题,并提供了重写规则作为显而易见的方法