2013-04-30 110 views
2

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

我有场景很少人做到这一点,但不是特定于Magento。所以请随时提供您的专家意见。谢谢!

回答

2

发现这样做的另一种简单的方法, 去Admin > System > Configuration > Web > Default Pages,然后将值更改为“默认No路线网址”到任何你的模块控制器动作如myweb\new404manager\index

这样,当404是发生这将指向控制器操作在该字段下定义。

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']。这个脚本负责回复的状态,无论使用哪种200 OK404 Not Found,使用header()功能

编辑的:原来,Magento的已经这样做了(所有的非静态的URL路由到的index.php)。我对CMS不够熟悉,但它似乎显示了一个标识为“no-route”的页面,因此希望您可以用您需要的东西来替换此页面的内容(相关代码是Mage_Cms_Model_Page类,NOROUTE_PAGE_ID,和noRoutePage()函数)。 grep -r是你的朋友想了解如何处理代码的其他人写的时候:d

+1

你确定这是否适用于Magento?对于磁盘上的文件的PHP脚本,这可能会起作用,但AFAIk Magento已经使用了相当多的URL,所以您需要在Magento内部,而不是在Apache内部。 – 2013-04-30 02:47:00

+0

是啊,我很笨,没有考虑到这一点。看起来现在我别无选择,只能研究OP想要做什么了:D – dequis 2013-04-30 03:17:25

+0

不,这实际上是OP的工作 - 做研究。我给你一个upvote,而不仅仅是反馈:)这不是它回答这个问题,但它回答了一个更一般的问题:) – 2013-04-30 03:18:26

相关问题