Php 在Magento捕获404的最佳方法是什么

Php 在Magento捕获404的最佳方法是什么,php,magento,http-status-code-404,Php,Magento,Http Status Code 404,我正在编写一个定制的Magento模块来处理网站的404个URL,以满足一些营销需求。 我想知道在模块进入Apache404页面之前,捕获404并将其传递给模块的最佳方式是什么 我有一些方法可以让人们这样做,但不是专门针对Magento的。因此,请随时提供您的专家建议。谢谢大家! 您不需要特定于CMS的方法。只需将以下内容添加到.htaccess文件: ErrorDocument 404 /some_php_script.php 或者,使用mod_重写: RewriteEngine On Re

我正在编写一个定制的Magento模块来处理网站的404个URL,以满足一些营销需求。 我想知道在模块进入Apache404页面之前,捕获404并将其传递给模块的最佳方式是什么


我有一些方法可以让人们这样做,但不是专门针对Magento的。因此,请随时提供您的专家建议。谢谢大家!

您不需要特定于CMS的方法。只需将以下内容添加到.htaccess文件:

ErrorDocument 404 /some_php_script.php
或者,使用mod_重写:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ some_php_script.php/$1
后者的优点是允许您访问POST数据。这个php脚本负责以某种方式连接到CMS代码

您应该能够使用
$\u SERVER['REQUEST\u URI']
获取原始url。此脚本负责使用函数以
200 OK
404 Not Found
回复状态


编辑:事实证明magento已经做到了这一点(所有非静态URL都被路由到index.php)。我对CMS不太熟悉,但它似乎显示了一个带有标识符“no route”的页面,因此希望您可以用您需要的内容替换此页面的内容(相关代码是
Mage\u CMS\u Model\u page
类、
NOROUTE\u page\u ID
,以及
noRoutePage()
函数)
grep-r
是您的朋友,当您试图了解如何处理其他人编写的代码时:D

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

看一看@


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


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

您真的确定这适用于Magento吗?对于在磁盘上是文件的PHP脚本,这可能是有效的,但是Afik MaGeto已经使用了漂亮的URL,所以你需要在MaMto to里面,而不是在Apache里面。是的,我是哑巴,没有考虑。看来现在我别无选择,只能研究OP想要做什么:DNo,这实际上是OP的工作——做研究。我给你一个向上的投票,只是为了得到反馈:)不是因为它回答了这个问题,而是回答了一个更一般的问题:)等等,你的意思是我来这里不是为了给别人工作来换取名誉积分?不管怎样,用我在快速grep中找到的结果更新答案。实际上我也做了研究,发现CMS indexController中的noRouteAction在Magento中完成了工作,而不是在xdebug;)。考虑写一个观察者来听这个事件,这仍然在研究中:)。无论如何,非常感谢您宝贵的反馈