在Magento捕捉404的最佳方法是什么?


Whats the best way to capture 404s in Magento

我正在编写一个自定义Magento模块来处理网站的404个url,以满足一些营销要求。我想知道捕获404并在到达Apache 404页面之前通过我的模块传递它们的最佳方法是什么?

我有几个场景的人这样做,但不是特定的Magento虽然。所以请随时提供您的专业建议。谢谢你!

您可以通过为noRoute重写cms控制器来实现这一点

看一下@

为noRoute动作重写magento cms控制器

http://magento4u.wordpress.com/tag/cms-noroute-redirection/

http://www.magentocommerce.com/blog/comments/tutorial-integrating-3rd-party-cms-content-within-magento/

我找到了另一种简单的方法,转到Admin > System > Configuration > Web > Default Pages,然后将"默认无路由URL"的值更改为您的模块控制器动作,例如myweb'new404manager'index

这样,当出现404时,它将指向该字段下定义的控制器动作。

您不需要特定于CMS的方法。只需在。htaccess文件中添加:

ErrorDocument 404 /some_php_script.php

或者这个,用mod_rewrite:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ some_php_script.php/$1

后者的优点是允许您访问POST数据。这个php脚本负责连接到你的CMS代码。

你应该能够得到原始的url与$_SERVER['REQUEST_URI']。该脚本负责使用header()函数

,用200 OK404 Not Found回复状态。

Edit:原来magento已经这样做了(所有的非静态url都路由到index.php)。我对CMS不够熟悉,但它似乎显示了一个带有标识符"no-route"的页面,所以希望你可以用你需要的东西替换这个页面的内容(相关代码是Mage_Cms_Model_Page类,NOROUTE_PAGE_IDnoRoutePage()函数)。当你试图理解如何处理别人写的代码时,grep -r是你的朋友:D