前端模块中的友好URL问题-Prestashop

我正在为使用SEO和URL配置中的301 Moved Permanently选项的网站构建前端模块。 Wesbite使用Prestashop 1.6.1.9。

在模块中,我正在这样定义路线:

public static $ModuleRoutes = array(
    'module-aacategories-viewmapping-mapping' => array(
        'controller' => 'viewmapping','rule' => 'mappings{/:tree}','keywords' => array(
            'tree' =>        array('regexp' => '[/_a-zA-Z0-9-\pL]*','param' => 'tree'),),'params' => array(
            'fc' => 'module','module' => 'aacategories',)
    )
);

在浏览器地址栏中,当我输入:

site.local / en / mappings / test-map / first-test

我得到:

请改用以下网址:

site.local / en / index.php?controller = viewmapping&tree = test-map%2Ffirst-test&module = aacategories

后一个链接为404。但是,当我在网址后附加&fc=module时,它会转到所需的页面。

问题:

1-如何强制Prestashop路由在末尾附加&fc=module

2-如何将友好的网址保留在地址栏中而不被重定向?

注意:当我将SEO和URL中的配置更改为no redirection时,它可以工作。但这不是prod中所需的配置。

非常感谢您的帮助。预先感谢。

iCMS 回答:前端模块中的友好URL问题-Prestashop

问题是您正在模块控制器中设置公共属性$php_self

您需要删除该属性,以便核心前端控制器不执行规范的重定向。

执行此操作的代码在FrontController.php第378行中。

if (!empty($this->page_name)) {
    $page_name = $this->page_name;
} elseif (!empty($this->php_self)) {
    $page_name = $this->php_self;
} elseif (Tools::getValue('fc') == 'module' && $module_name != '' && (Module::getInstanceByName($module_name) instanceof PaymentModule)) {
    $page_name = 'module-payment-submit';
}
// @retrocompatibility Are we in a module ?
elseif (preg_match('#^'.preg_quote($this->context->shop->physical_uri,'#').'modules/([a-zA-Z0-9_-]+?)/(.*)$#',$_SERVER['REQUEST_URI'],$m)) {
    $page_name = 'module-'.$m[1].'-'.str_replace(array('.php','/'),array('','-'),$m[2]);
} else {
    $page_name = Dispatcher::getInstance()->getController();
    $page_name = (preg_match('/^[0-9]/',$page_name) ? 'page_'.$page_name : $page_name);
}

然后,如果您在第401行中设置了该属性,则会进行规范重定向。

if (!empty($this->php_self) && !Tools::getValue('ajax')) {
    $this->canonicalRedirection($this->context->link->getPageLink($this->php_self,$this->ssl,$this->context->language->id));
}
本文链接:https://www.f2er.com/2102672.html

大家都在问