【问题标题】:Mapping php urls with folders to query strings [closed]将带有文件夹的php url映射到查询字符串[关闭]
【发布时间】:2018-06-22 16:46:30
【问题描述】:

我想使用 php 将 SEO 友好的 URL 映射到带有查询字符串的实际不友好的 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 的表吗?

【问题讨论】:

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

标签: php url-rewriting seo


【解决方案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');
}
?>

如有错误请指正。

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多