使用基本(使用ID)结构将旧产品网址(无ID)重定向到新网址

编程入门 行业动态 更新时间:2024-10-26 20:31:00
本文介绍了使用基本(使用ID)结构将旧产品网址(无ID)重定向到新网址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我的PrestaShop 1.7.5安装遇到问题.

I'am facing a problem with our PrestaShop 1.7.5 installation.

大约2周前,我尝试将PrestaShop版本(从1.7.4升级到1.7.5).不幸的是,一个重要的模块不再起作用(调度程序的替代已过时),该模块生成SEO友好的URL,URL中没有ID,例如:domain/{category}/{rewrite}

About 2 weeks ago, I tried to upgrade our PrestaShop version (from 1.7.4 to 1.7.5). Unfortunately 1 important module is not working any longer (override of the dispatcher is outdated), this module generates SEO-friendly URLs, without ID's in the URL, like this: domain/{category}/{rewrite}

我们希望不进行任何回滚,并且正在考虑两种选择.

We prefer to do no roll-back and are considering two options.

选项1:将所有旧产品网址重定向到新网址

旧网址格式: domain/{category}/{rewrite}

新的网址格式: domain/{parent-category}/{sub-category}/{ID}-{ID_product_attribute}-{rewrite}

选项2:将所有404重定向到searchcontroller

通过使用URL中的关键字,可以使用{category}& {rewrite}

By using the keywords from the URL, to achieve this, we can use the part {category} & {rewrite}

我尝试了很多小代码,就像在网上找到的那样,

I've tried a lot of small codes, which I've found on the net, like this one:

RewriteRule ^search/?$ / [R=301,L] RewriteRule ^search/([^/]+)/?$ /search/$1/1/ [R=301,L] RewriteRule ^search/([^/]+)/([0-9]+)/?$ search.php?q=$1&category=web&d=$2 [NC,L]

我确实阅读了 httpd.apache上的手册/docs/2.4/mod/mod_rewrite.html 我确实了解如何将一个简单的页面重定向到另一个页面...但是我被卡住了...

I did read the manual on httpd.apache/docs/2.4/mod/mod_rewrite.html I do understand how to redirect a simple page to another... but I get stuck...

这是我现在的.htacces文件(由prestashop生成):

This is my .htacces file as it is now (generated by prestashop):

# ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again # .htaccess automaticaly generated by PrestaShop e-commerce open-source solution # www.prestashop - www.prestashop/forums <IfModule mod_rewrite.c> <IfModule mod_env.c> SetEnv HTTP_MOD_REWRITE On </IfModule> RewriteEngine on #Domain: domain.be RewriteRule . - [E=REWRITEBASE:/] RewriteRule ^api$ api/ [L] RewriteRule ^api/(.*)$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L] # Images RewriteCond %{HTTP_HOST} ^domain.be$ RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L] RewriteCond %{HTTP_HOST} ^domain.be$ RewriteRule ^([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$1$2$3$4.jpg [L] RewriteCond %{HTTP_HOST} ^domain.be$ RewriteRule ^([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$1$2$3$4$5.jpg [L] RewriteCond %{HTTP_HOST} ^domain.be$ RewriteRule ^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg [L] RewriteCond %{HTTP_HOST} ^domain.be$ RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg [L] RewriteCond %{HTTP_HOST} ^domain.be$ RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg [L] RewriteCond %{HTTP_HOST} ^domain.be$ RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L] RewriteCond %{HTTP_HOST} ^domain.be$ RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg [L] RewriteCond %{HTTP_HOST} ^domain.be$ RewriteRule ^c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2$3.jpg [L] RewriteCond %{HTTP_HOST} ^domain.be$ RewriteRule ^c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2.jpg [L] # AlphaImageLoader for IE and fancybox RewriteRule ^images_ie/?([^/]+)\.(jpe?g|png|gif)$ js/jquery/plugins/fancybox/images/$1.$2 [L] # Dispatcher RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ %{ENV:REWRITEBASE}index.php [NC,L] </IfModule> AddType application/vnd.ms-fontobject .eot AddType font/ttf .ttf AddType font/otf .otf AddType application/font-woff .woff AddType font/woff2 .woff2 <IfModule mod_headers.c> <FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|svg)$"> Header set Access-Control-Allow-Origin "*" </FilesMatch> </IfModule> <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/gif "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType text/css "access plus 1 week" ExpiresByType text/javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType image/x-icon "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" ExpiresByType image/vnd.microsoft.icon "access plus 1 year" ExpiresByType application/font-woff "access plus 1 year" ExpiresByType application/x-font-woff "access plus 1 year" ExpiresByType font/woff2 "access plus 1 year" ExpiresByType application/vnd.ms-fontobject "access plus 1 year" ExpiresByType font/opentype "access plus 1 year" ExpiresByType font/ttf "access plus 1 year" ExpiresByType font/otf "access plus 1 year" ExpiresByType application/x-font-ttf "access plus 1 year" ExpiresByType application/x-font-otf "access plus 1 year" </IfModule> <IfModule mod_headers.c> Header unset Etag </IfModule> FileETag none <IfModule mod_deflate.c> <IfModule mod_filter.c> AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript application/x-javascript font/ttf application/x-font-ttf font/otf application/x-font-otf font/opentype image/svg+xml </IfModule> </IfModule> #If rewrite mod isn't enabled ErrorDocument 404 /index.php?controller=404 # ~~end~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again

提前谢谢!

推荐答案

此方法有效,它将永久将旧产品的URL重定向到新的URL(选项1):

  • 将以下脚本放置在PrestaShop根文件夹中
  • 可选:编辑id_shop和id_lang参数以匹配您的配置
  • 启动它并将结果复制/粘贴到您的.htaccess文件中,紧随RewriteEngine on-删除脚本
  • Voilà!
  • Place the script below in your PrestaShop root folder
  • Optional: Edit the id_shop and id_lang parameters to match your configuration
  • Launch it and copy/paste the result to your .htaccess file, just after RewriteEngine on - delete the script
  • Voilà!
  • 脚本:

    <?php include('config/config.inc.php'); include('init.php'); $context = Context::getContext(); $products = Db::getInstance()->ExecuteS(' SELECT p.id_product, pl.link_rewrite prod_url, cl.link_rewrite cat_url FROM '._DB_PREFIX_.'product p LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product) LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = p.id_category_default) WHERE p.active = 1 AND cl.id_lang = 1 AND cl.id_shop = 1 AND pl.id_lang = 1 AND cl.id_shop = 1'); foreach ($products as $p) { $new_url = $context->link->getProductLink(new Product((int)$p['id_product'])); echo 'RewriteRule ^'.$p['cat_url'].'/'.$p['prod_url'].'$ '.$new_url.' [L,R=301]<br />'; }

    输出(在仅包含2种产品的PrestaShop演示商店中):

    RewriteRule ^men/hummingbird-printed-t-shirt$ localhost/prestashop/1-hummingbird-printed-t-shirt.html [L,R=301] RewriteRule ^women/brown-bear-printed-sweater$ localhost/prestashop/2-brown-bear-printed-sweater.html [L,R=301]

    复制/粘贴后

    .htaccess文件:

    ... <IfModule mod_rewrite.c> <IfModule mod_env.c> SetEnv HTTP_MOD_REWRITE On </IfModule> RewriteEngine on # Permanent redirections RewriteRule ^men/hummingbird-printed-t-shirt$ localhost/prestashop/1-hummingbird-printed-t-shirt.html [L,R=301] RewriteRule ^women/brown-bear-printed-sweater$ localhost/prestashop/2-brown-bear-printed-sweater.html [L,R=301] #Domain: localhost RewriteRule . - [E=REWRITEBASE:/prestashop/] RewriteRule ^api$ api/ [L] ...

    就转化率而言,选项#2在我看来似乎不可行.

    Option #2 does not seem viable to me in terms of conversion rate.

    我希望这会有所帮助!

    如果没有,我会向模块的开发人员索要更新版本,鉴于这对您来说会很耗时,因此25美元的升级成本似乎是合理的.

    If not, I'd ask the module's developer for an updated version, $25 seems a reasonable cost to upgrade given how time-consuming this would be for you.

    更多推荐

    使用基本(使用ID)结构将旧产品网址(无ID)重定向到新网址

    本文发布于:2023-10-31 18:31:38,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1546919.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:网址   到新   重定向   结构   产品

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!