我正在编写一个自定义 Magento 模块来处理网站的 404 URL 以满足一些营销需求。我想知道在它到达 Apache 404 页面之前捕获 404 并通过我的模块传递它们的最佳方法是什么?
我的场景很少有人这样做,但不是特定于 Magento。因此,请随时提供您的专家建议。谢谢!
我正在编写一个自定义 Magento 模块来处理网站的 404 URL 以满足一些营销需求。我想知道在它到达 Apache 404 页面之前捕获 404 并通过我的模块传递它们的最佳方法是什么?
我的场景很少有人这样做,但不是特定于 Magento。因此,请随时提供您的专家建议。谢谢!
您可以通过为 noRoute 重写 cms 控制器来完成此操作
看一看 @
为 noRoute 操作覆盖 magento cms 控制器
找到另一种简单的方法,转到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 代码。
您应该能够使用$_SERVER['REQUEST_URI']
. 此脚本负责使用header()函数使用200 OK
或回复状态404 Not Found
编辑:原来magento已经这样做了(所有非静态网址都被路由到index.php)。我对 CMS 不够熟悉,但它似乎显示了一个带有标识符“no-route”的页面,所以希望你可以用你需要的东西替换这个页面的内容(相关代码是Mage_Cms_Model_Page
类NOROUTE_PAGE_ID
,和noRoutePage()
功能)。grep -r
在尝试了解如何处理其他人编写的代码时是您的朋友:D