2022-10-25 11:18:06 - 米境通
首先说说301和302重定向
在网站当中由于我们的一些操作导致原来的链接不能访问了,如域名变更了或者目录被删除了,为了不网站的排名因为网址的变化而收到影响,原来的链接能够访问,我们就需要对原来的链接进行重定向到新的地址。
301和302有什么区别
302重定向是暂时的重定向,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。
301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。
而实现301和302重定向的方法也有很多种
一般我们都会在.htaccess文件中增加301重定向指令还有header头部增加重定向代码、修改服务器配置等方法
现在我们就说说magento的重定向。
magento是自带重定向功能的
如果我们运营的网站需要重定向怎么办,数据那么多我们不可能说一个一个产品来修改吧,那么我们可以通过mysql操作来做magento重定向。
上代码
首先查出你的产品类型ID
selectentity_type_idfromeav_entity_typewhereentity_type_code='catalog_product';
我这里查到的产品类型ID是4,接着再查找产品的属性值
selectattribute_id,backend_typefromeav_attributewhereentity_type_id=4andattribute_codein('name','url_key','url_path','visibility');
此时查出分别是719798102
这里我们先创建一个临时表保存core_url_rewrite表里的数据,tmp_table即我建的临时表。
insertintotmp_table
('url_rewrite_id','store_id','category_id','product_id','id_path','request_path','target_path','is_system','options','description')
select'url_rewrite_id','store_id','category_id','product_id','id_path','request_path','target_path','is_system','options','description'fromcore_url_rewritewhereis_system=1andoptionsisnull;
在这里我们可以验证一下产品的数量是否对得上,以免造成失误。
selectcount(*)fromcatalog_product_entitywherestore_id=1
selectcount(*)fromcore_url_rewritewhereis_system=1andproduct_idisnotnullgroupbyproduct_id
更新core_url_rewrite表里的request_path(这里我不光只是做重定向,我还把产品的url改成了以产品名字中间用-链接来访问)
Update
core_url_rewritea
joincatalog_product_entity_varcharbona.product_id=b.entity_idandb.attribute_id=71andb.entity_type_id=4andb.store_id=0
joincatalog_product_entity_varcharcona.product_id=c.entity_idandc.attribute_id=97andc.entity_type_id=4andc.store_id=0
joincatalog_product_entity_intdona.product_id=d.entity_idandd.attribute_id=102andd.entity_type_id=4andd.store_id=0andd.value!=1
seta.request_path=replace(a.request_path,c.value,concat(ClearStr(b.value),'-',b.entity_id))wherea.product_idisnotnull;
SlearStr是我自己定义的一个函数
更新产品的url_key
上面我们有查到url_key和这个值的类型,那么产品的url_key就存储在对应的表里。特别说一下magento的产品是纵向存储的。
Update
catalog_product_entity_varchara
joincatalog_product_entity_varcharbona.entity_id=b.entity_idandb.attribute_id=71andb.entity_type_id=4andb.store_id=0anda.attribute_id=98anda.entity_type_id=4anda.store_id=0
seta.value=concat(ClearStr(b.value),'-',b.entity_id,'.html');
再更新url_path
updatetmp_tablea
joincore_url_rewriteb
ona.product_id=b.product_idanda.store_id=b.store_idanda.id_path=b.id_path
seta.target_path=b.request_path
whereb.product_idisnotnull