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;
}
}
我的问题涉及在 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;
}
}