Magento URL rewrite

来源:互联网 发布:广州鱼苗淘宝 编辑:程序博客网 时间:2024/05/18 15:53
这篇文章的地址是:http://www.divisionlab.com/solvingmagento/magento-url-rewrites/


Magento是一个实现了前端控制器模式的Web应用程序。这意味着大多数的HTTP请求是通过根目录下的index.php进行路由分发的。如果要显示一个目录,一个产品,或者一个未分类的消息页面,magento分析进来的URL请求并决定必须由哪些模块和控制器来参与处理这个请求。

magneto重写前的URL是这样的:
请求产品页: catalog/product/view/id/166
请求目录页: catalog/category/view/id/10
这些个url携带了magento用来产生HTML输出的重要信息,比如,catalog会被magento对应到Mage_Catalog模块,product被翻译成ProductController控制器,而view则被翻译成viewAction,后面的id/166则被解析成了id=166.因此,这个url告诉magento,调用方法:Mage_Catalog_ProductController::viewAction(),这个方法负责把编号为166的产品详情页面渲染出来。对于像magento这样的一个使用MVC的web框架程序来说,使用这样的URL是无可厚非的,这样的url面向开发者而言,逻辑很清晰。然而,这样的URL模式,对于程序外部系统而言(主要是用户和搜索引擎)却存在两个明显的缺陷。第一,用户不友好。这个URL根本没告诉用户现在看到的是哪个商店的哪个产品。其次,对搜索引擎而言,这样的URL中包含的关键词太普通了,不能获得比较靠前的搜索排序。基于这两点,非常有必要对URL进行重写,在商店的URL中包含目录名称和商品名称。携带有特殊意义的描述性词汇的URL更能满足用户和搜索引擎的需求,从而改进业务能力。

Magento使用rewrite engine 把用户输入的描述性URL映射到它的程序资源上。rewrite engine是Magento内核系统中负责匹配描述性URL到controllers, actions,和entity IDs上的一个内核模块。并且负责给程序资源生成可描述性的URL。
Magento程序资源:Magento Resources
entity:magento 实体,对应数据表


所以我认为URL重写思路是这样的:
(1)magento创建程序资源时(比如商品目录和商品),URL引擎为其生成可描述性URL,存到数据库core_url_rewrite entity中。
(2)在路由分发过程中,查询数据库,找到用户请求的真实程序资源路径
(3)调用这个程序资源,返回响应给用户。









0 0
原创粉丝点击