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