CakePHP 3.x 路由 301 将旧链接重定向到具有语言修改的新链接

CakePHP 3.x route 301 redirects of old links to new links with language modification

我的问题涉及在 CakePHP 中创建通用路由重定向 3.x。

我的网站中曾经有以下 URL 结构:

https://www...../controller/action?language=eng
https://www...../controller/action/slug?language=eng
https://www...../controller/action?language=pol
https://www...../controller/action/slug?language=pol
                                                

目前我有以下 URL 结构:

https://www...../en/controller/action
https://www...../en/controller/action/slug                                                   
https://www...../pl/controller/action
https://www...../pl/controller/action/slug

我应该如何创建 $routes->redirect 以便如果用户输入旧 link 他或她会自动重定向到新格式的正确语言页面?我有数百个页面,我无法为每个页面单独创建 $routes->redirect,因为它会做很多工作。

我会尝试将每种前缀语言都包含到一个数组中,因此通过 $this->here 检查 slugs 上是否有 ?language=

根据哪种语言,我会通过 strpos 和 PHP 检查某种语言是否构成插入的 URL 的一部分。

如果两个条件都不成立,我将继续并跳转到循环的下一次迭代。

最后,如果满足条件,我就按照我事先指出的方式进行重定向。 希望能给大家一个解决方案的提示。

干杯

 $lang = '?language=';
$slugArr = [$lang.'eng', $lang.'pol', $lang.'otherlang'];
foreach($slugArr as $slugName) {
    $pos = strpos($this->here, $slugName);
    $lang = strpos($this->here, 'eng') || strpos($this->here, 'pol');
    if($pos !== false && $lang !== false) {
        if($slugName === $lang.'eng') {
            Router::redirect('/controller/action?language=eng', '/en/controller/action/', array('status' => 301));
        } else if($slugName === $lanmg.'pol'){
            Router::redirect('/controller/action?language=pol', '/pol/controller/action/', array('status' => 301));
        }
    }else{
        continue;
    } 
}