2022-10-25 11:18:06 - 米境通
首先說(shuō)說(shuō)301和302重定向
在網(wǎng)站當(dāng)中由于我們的一些操作導(dǎo)致原來(lái)的鏈接不能訪問(wèn)了,如域名變更了或者目錄被刪除了,為了不網(wǎng)站的排名因?yàn)榫W(wǎng)址的變化而收到影響,原來(lái)的鏈接能夠訪問(wèn),我們就需要對(duì)原來(lái)的鏈接進(jìn)行重定向到新的地址。
301和302有什么區(qū)別
302重定向是暫時(shí)的重定向,搜索引擎會(huì)抓取新的內(nèi)容而保留舊的網(wǎng)址。因?yàn)榉?wù)器返回302代碼,搜索引擎認(rèn)為新的網(wǎng)址只是暫時(shí)的。
301重定向是永久的重定向,搜索引擎在抓取新內(nèi)容的同時(shí)也將舊的網(wǎng)址替換為重定向之后的網(wǎng)址。
而實(shí)現(xiàn)301和302重定向的方法也有很多種
一般我們都會(huì)在.htaccess文件中增加301重定向指令還有header頭部增加重定向代碼、修改服務(wù)器配置等方法
現(xiàn)在我們就說(shuō)說(shuō)magento的重定向。
magento是自帶重定向功能的
如果我們運(yùn)營(yíng)的網(wǎng)站需要重定向怎么辦,數(shù)據(jù)那么多我們不可能說(shuō)一個(gè)一個(gè)產(chǎn)品來(lái)修改吧,那么我們可以通過(guò)mysql操作來(lái)做magento重定向。
上代碼
首先查出你的產(chǎn)品類型ID
selectentity_type_idfromeav_entity_typewhereentity_type_code='catalog_product';
我這里查到的產(chǎn)品類型ID是4,接著再查找產(chǎn)品的屬性值
selectattribute_id,backend_typefromeav_attributewhereentity_type_id=4andattribute_codein('name','url_key','url_path','visibility');
此時(shí)查出分別是719798102
這里我們先創(chuàng)建一個(gè)臨時(shí)表保存core_url_rewrite表里的數(shù)據(jù),tmp_table即我建的臨時(shí)表。
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;
在這里我們可以驗(yàn)證一下產(chǎn)品的數(shù)量是否對(duì)得上,以免造成失誤。
selectcount(*)fromcatalog_product_entitywherestore_id=1
selectcount(*)fromcore_url_rewritewhereis_system=1andproduct_idisnotnullgroupbyproduct_id
更新core_url_rewrite表里的request_path(這里我不光只是做重定向,我還把產(chǎn)品的url改成了以產(chǎn)品名字中間用-鏈接來(lái)訪問(wèn))
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是我自己定義的一個(gè)函數(shù)
更新產(chǎn)品的url_key
上面我們有查到url_key和這個(gè)值的類型,那么產(chǎn)品的url_key就存儲(chǔ)在對(duì)應(yīng)的表里。特別說(shuō)一下magento的產(chǎn)品是縱向存儲(chǔ)的。
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