什么是在Magento捕获404s的最佳方式

时间:2013-04-30 02:12:35

标签: php magento http-status-code-404

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

我的场景很少有人这样做,但不是特定于Magento。所以请随时提供您的专家建议。谢谢!

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

您不需要特定于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代码。

您应该可以使用$_SERVER['REQUEST_URI']获取原始网址。此脚本负责使用header()函数<{1}}或200 OK来回复状态{/ 1}}或404 Not Found

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