在 Prestashop 中重写重定向到产品的模块路由
Module route with rewrite redirect to product on Prestahop
我为艺术家页面创建了自定义路由:
public function hookModuleRoutes($params)
{
return [
'module-artists-artist' => [
'controller' => 'artist',
'rule' => 'artists/{id_artist}',
'keywords' => [
'id_artist' => ['regexp' => '[0-9]+', 'param' => 'id_artist'],
],
'params' => [
'fc' => 'module',
'module' => 'artists',
'controller' => 'artist'
],
],
];
}
如果我使用 /artists/1
进行测试,这会起作用。但是我想添加 link_rewrite
属性。所以我修改了这样的配置:
public function hookModuleRoutes($params)
{
return [
'module-artists-artist' => [
'controller' => 'artist',
'rule' => 'artists/{id_artist}-{rewrite}',
'keywords' => [
'id_artist' => ['regexp' => '[0-9]+', 'param' => 'id_artist'],
'rewrite' => ['regexp' => '[_a-zA-Z0-9\pL\pS-]*'],
],
'params' => [
'fc' => 'module',
'module' => 'artists',
'controller' => 'artist'
],
],
];
}
但是当我尝试 /artists/1-baxter
时,我被重定向到 ID 为 1
的产品的产品页面。我的艺术家控制器从未被调用。
[Debug] This page has moved
Please use the following URL instead: http://localhost:8000/fr/estampes/1-est-ce-que-etre
我该如何解决?
这是因为您的模式生成的 URLs 也匹配产品 URL 模式,后者具有更高的优先级。 PrestaShop 不检查产品是否存在,它只是直接重定向到 ProductController
。 PrestaShop 中的页面模式彼此不同,因此可以快速识别 URLs 与 X 控制器相关联。您可以通过检查默认模式来确认这一点。
您可以在后台查看产品 URL 模式:SEO & URLs 或 DispatcherCore
class。无论如何,如果你想要一个简单的修复,我建议制作这个模式:
artists/{id_artist}/{rewrite}
我为艺术家页面创建了自定义路由:
public function hookModuleRoutes($params)
{
return [
'module-artists-artist' => [
'controller' => 'artist',
'rule' => 'artists/{id_artist}',
'keywords' => [
'id_artist' => ['regexp' => '[0-9]+', 'param' => 'id_artist'],
],
'params' => [
'fc' => 'module',
'module' => 'artists',
'controller' => 'artist'
],
],
];
}
如果我使用 /artists/1
进行测试,这会起作用。但是我想添加 link_rewrite
属性。所以我修改了这样的配置:
public function hookModuleRoutes($params)
{
return [
'module-artists-artist' => [
'controller' => 'artist',
'rule' => 'artists/{id_artist}-{rewrite}',
'keywords' => [
'id_artist' => ['regexp' => '[0-9]+', 'param' => 'id_artist'],
'rewrite' => ['regexp' => '[_a-zA-Z0-9\pL\pS-]*'],
],
'params' => [
'fc' => 'module',
'module' => 'artists',
'controller' => 'artist'
],
],
];
}
但是当我尝试 /artists/1-baxter
时,我被重定向到 ID 为 1
的产品的产品页面。我的艺术家控制器从未被调用。
[Debug] This page has moved
Please use the following URL instead: http://localhost:8000/fr/estampes/1-est-ce-que-etre
我该如何解决?
这是因为您的模式生成的 URLs 也匹配产品 URL 模式,后者具有更高的优先级。 PrestaShop 不检查产品是否存在,它只是直接重定向到 ProductController
。 PrestaShop 中的页面模式彼此不同,因此可以快速识别 URLs 与 X 控制器相关联。您可以通过检查默认模式来确认这一点。
您可以在后台查看产品 URL 模式:SEO & URLs 或 DispatcherCore
class。无论如何,如果你想要一个简单的修复,我建议制作这个模式:
artists/{id_artist}/{rewrite}