2

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

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

4

3 回答 3

2

您可以通过为 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/

于 2013-04-30T14:46:45.043 回答
2

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

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

于 2013-05-01T04:00:42.870 回答
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()函数使用200 OK或回复状态404 Not Found

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

于 2013-04-30T02:29:27.527 回答