我正在编写一个自定义Magento模块来处理网站的404个网址,以满足一些营销要求。 我想知道在进入Apache 404页面之前捕获404并通过我的模块的最佳方法是什么?
我的场景很少有人这样做,但不是特定于Magento。所以请随时提供您的专家建议。谢谢!
答案 0 :(得分:2)
您可以通过为noRoute
重写cms控制器来完成此操作看看@
Overriding magento cms controller for noRoute action
答案 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_ID
和noRoutePage()
函数。在试图了解如何处理其他人写的代码时,grep -r
是你的朋友:D