使用Prestashop 1.5.3的mod_rewrite /友好URL

时间:2013-01-15 13:42:13

标签: mod-rewrite friendly-url prestashop

我创建了3个自定义页面(控制器,php和tpl文件),并为SEO和&创建了条目。网址。 所有自定义页面目前都是重复的,并显示相同的内容。

我在blocktopmenu.php中创建了自定义页面的链接:

$this->_menu .= '<li><a href="'.$this->context->link->getPageLink('bHome.php').'">Home</a></li>'.PHP_EOL;
$this->_menu .= '<li><a href="'.$this->context->link->getPageLink('bSamples.php').'">Samples</a></li>'.PHP_EOL;
$this->_menu .= '<li><a href="'.$this->context->link->getPageLink('start.php').'">Test</a></li>'.PHP_EOL;

链接正常,网站显示正确。

我的问题是,只显示了一个页面友好的URL,我不知道问题可能是什么。

正常工作的网址翻译如下:

http://localhost/Shop/index.php?controller=start -> http://localhost/Shop/Test

我的其他两页未翻译:

http://localhost/Shop/index.php?controller=bHome
http://localhost/Shop/index.php?controller=bSamples

有人知道问题可能是什么吗?

1 个答案:

答案 0 :(得分:0)

好吧,让我们来看看函数getPageLink:

public function getPageLink($controller, $ssl = false, $id_lang = null, $request = null, $request_url_encode = false)
{
    $controller = Tools::strReplaceFirst('.php', '', $controller);

    if (!$id_lang)
        $id_lang = (int)Context::getContext()->language->id;

    if (!is_array($request))
    {
        // @FIXME html_entity_decode has been added due to '&amp;' => '%3B' ...
        $request = html_entity_decode($request);
        if ($request_url_encode)
            $request = urlencode($request);
        parse_str($request, $request);
    }

    $uri_path = Dispatcher::getInstance()->createUrl($controller, $id_lang, $request);
    $url = ($ssl && $this->ssl_enable) ? Tools::getShopDomainSsl(true) : Tools::getShopDomain(true);
    $url .= __PS_BASE_URI__.$this->getLangLink($id_lang).ltrim($uri_path, '/');

    return $url;
}

它会删除.php,因为@romainberger建议。但在你的情况下情况并非如此。 接下来,我们将深入研究Dispatcher类中的createUrl。我不打算把它全部粘贴在这里,你也可以自己挖掘,但是:

public function createUrl($route_id, $id_lang = null, array $params = array(), $force_routes = false, $anchor = '')
{
    if (!$id_lang)
        $id_lang = Context::getContext()->language->id;

    if (!isset($this->routes[$id_lang][$route_id]))
    {
        $query = http_build_query($params, '', '&');
        $index_link = $this->use_routes ? '' : 'index.php';
        return ($route_id == 'index') ? $index_link.(($query) ? '?'.$query : '') : 'index.php?controller='.$route_id.(($query) ? '&'.$query : '').$anchor;
    }

我很确定这是这种情况,这意味着当前语言中的路由配置不正确。