.htaccess - Prestashop 友好 URL

标签 .htaccess url-rewriting seo prestashop clean-urls

我一直在尝试为 prestashop 中的产品创建第二个 url 重写选项.在 SEO 和 URL 部分的标准 Prestashop 安装中,我得到了以下产品 url 构建:

{category:/}{id}-{rewrite}-{ean13}.html

这将创建以下产品 url:

https://www.example.com/{category-name}/{product-id}/{product-name}/{ean13}.html

我想添加的是出于各种原因通过以下 url 构建访问产品页面的选项:

ean/{ean13}.html

结果 url 将类似于以下示例:

https://www.example.com/ean13/{ean13}.html

注意,ID 是 url 构建的标准必填字段,这意味着我不能使用:“只需调整 url 构建”作为答案。

是否有能够生成此类结构的模块、插件或代码片段?

我确实找到了一些“从漂亮的 url 中删除 ID”模块,但这并没有给我正在搜索的结果。只是部分因为它只删除了 ID。

如果它是重定向到第一个{code} 段中提到的标准 url 构建,那将不是问题。我知道我可以在我的 .htacces 文件中编写重写规则,但是为每个产品执行此操作将需要大量工作,所以我想知道是否有更简单的方法来实现这一点。

一如既往地提前致谢!

最佳答案

如果您不介意重定向到标准 URL,那么使用模块即可轻松解决。

  1. 创建一个使用 hook moduleRoutes 的模块并配置一个友好的 URL 以使用模块 Controller
  2. 创建模块前端 Controller
  3. 在您的自定义 Controller 中运行数据库查询以检查是否存在具有请求的 EAN 的产品
  4. 如果产品存在则重定向到产品页面,否则重定向到 404 页面或其他内容

我假设您知道如何编写模块和 Controller ,所以我不会只写相关部分的整个代码。

在模块类中 Hook moduleRoutes

在此 Hook 中,您可以为您的自定义 Controller 配置一个友好的 URL。

public function hookModuleRoutes()
{
    return [
        'mymodulename-mycontrollername-root' => [
            'rule' => 'ean13/{:ean13}.html',
            'controller' => 'mycontrollername',
            'keywords' => [
                'ean13' => ['regexp' => '[0-9]+', 'param' => 'ean13']
            ],
            'params' => [
                'fc' => 'module',
                'module' => 'mymodulename'
            ]
        ]
    ];
}

因此访问 https://www.example.com/ean13/12345.html 将运行您的模块 Controller 并且 GET 变量 ean13 的值为 12345

然后创建mycontrollername 模块 Controller ,您可以在其中使用postProcess() 方法检查EAN 是否存在。

public function postProcess()
{
    $query = new DbQuery();
    $query->select('id_product')
          ->from('product_attribute', 'pa')
          ->where('pa.ean13 = ' . (int)Tools::getValue('ean13'))
    $productId = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
    if ($productId) {
        Tools::redirect($this->context->link->getProductLink($productId));
    }

    Tools::redirect('pagenotfound');
}

在查询中,我们检查 product_attribute 表,因为产品组合可以有自己的 EAN13,并且您还希望这些 EAN13 重定向到产品页面。

此答案的基础最常用于将核心产品搜索 Controller 替换为自定义且 SEO 友好的 Controller 。

关于.htaccess - Prestashop 友好 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49231467/

相关文章:

.htaccess - htaccess 选项 -Indexes 有什么用?

regex - Nginx 重写规则以从请求的 url 重定向到特定的 url

apache - 从 example.com 重定向到 www.example.com

wordpress - 如何使 Wordpress 永久链接忽略自定义 url 重写

php - 使用 PHP 检测爬行(搜索引擎的访问)

apache - 我如何从 "www.mywebsite.com////"重定向到 "www.mywebsite.com"?

php - Symfony 从路由中删除前三个字符

regex - WordPress 重定向插件在目标 URL 中包含查询参数

php - 使用 php/.htaccess 设置漂亮的 url 时遇到问题

validation - 如何处理未在 HTML5 中验证的元元素?