System->Configuration->Catalog->Search Engine Optimizations Product URL Suffix 产品页面URL后缀 Category URL Suffix 目录页面URL后缀 Use Categories Path for Product URLs 是否为URL添加目录路径 Create Permanent Redirect for URLs if URL Key Changed 当URL改变时是否添加旧链接到新链接的永久定位
关于是否重定向到新链接这个开关,当编辑一个产品时: 如果Create Permanent Redirect for URLs if URL Key Changed设置为NO时,这里的这个选择框默认就不会自动选上,当然了,编辑了这个Key之后,还是可以手动勾上的。 这里出现的URL Key,实际上对应产品实体(编辑目录时是目录实体)的url_key属性(字段),它会和Product URL Suffix组合形成一个值保存到url_path属性(字段),以上面的例子为例,nokia-2610-phone保存到url_key中,而url_path保存的就是nokia-2610-phone.html。 产品或目录的页面重写后的URL实际上最终要写入core_url_rewrite(一张索引表),当后台更新Catalog URL Rewrites,这个表将重新构建(根据元数据)。
构建的依据就是上面提到的参数。看下这个表结构:
这里为每个商店都产生了一份URL(有两个形式): http://learn.magento.com/electronics/cell-phones/nokia-2610-phone.html http://learn.magento.com/nokia-2610-phone.html 这里有一个是添加了目录的URL,一个是没有添加目录前导的URL,两个都可以访问。当设置成不添加目录前导符时,只会有一个。虽然两个都能访问,但是系统实际只会暴露其中一个。 注意:虽然这里生成了很多份URL,看起来是可以为每个商店对同一个商品指定不同的URL,可是事实并非如此,后台提供的URL KEY的作用域是全局的。每次重新生成URL时都是基于url_key作为基准,纠正对应的url_path(可以改,但是会被纠正),然后使用url_path产生URL。
具体,每个实体,都只有一个url_key,它的对应store_id为0,但是有多个url_path对应不同的store_id(0,1,2,3…),它是根据url_key生成的。 所以,我们根本不需要去修改url_path,只需要修改url_key即可(后台刷新索引后修改的url_path就会被url_key纠正)。 下面看看在选择了Create Permanent Redirect for old URL时写入了什么内容:
这些个东西怎么设计的就搞不懂了。 实际上,URL主要有两个元数据,url_key和url_path,这两个数据更随着产品或目录,所以我们要修改数据时,实际只要修改这两个元数据(只要改url_key)。下面通过URL来修改:
代码不多,但是相当耗费资源,你可以会得到504。为何如此耗费资源,首先获取所有产品列表,这个不算耗费资源,接下来是获取产品信息,这个是涉及多个表查询,会耗费大量资源(这个过程循环所有产品数次),然后更新属性值。所以稍微做些调整:
这样资源的消耗降低得非常明显。检索EAV模型的数据时,一定要指定需要的属性,否则吃不消。 通过以上分析,URL的修改,其实只要修改url_key即可,其它的,在生成索引时会自动完成(纠正)。那么直接操作SQL一样可以。不过看起来和上面的例子也差不多了。
接下来看Catalog->URL Rewrite Management 这个就是core_url_rewrite的内容,可以编辑修改URL,不过比较悲催的是,当修改了URL之后,如果重新刷新重写索引,被修改的链接被重定向到未修改之前的链接。除非你永不刷新重写索引,否则最好不要使用这个功能。(本质上,这里是希望针对同一个产品对不同商店应用不同链接,在这里修改事实上也可以实现,就是刷新索引后数据丢失,所以比较脑残) (责任编辑:最模板) |