以下问题:在某些情况下,我希望将用户重定向到magento的默认页面找不到页面。
因此,我使用以下代码声明了一个事件观察者。
Mage::app()->getFrontController()->getResponse()->setHeader('HTTP/1.1','404 Not Found',true);
Mage::app()->getFrontController()->getResponse()->setHeader('Status','404 File not found',true);
$pageId = Mage::getStoreConfig('web/default/cms_no_route');
$url = rtrim(Mage::getUrl($pageId),'/');
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
重定向工作正常,但给定的HTTP状态代码是302 Found而不是404 Not Found。 什么提示我做错了什么?
答案 0 :(得分:3)
官方的Magento方式:
$this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
$this->getResponse()->setHeader('Status','404 File not found');
$pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_NO_ROUTE_PAGE);
if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
$this->_forward('defaultNoRoute');
}
我从noRouteAction
中的/app/code/core/Mage/Cms/controllers/IndexController.php
函数复制了此代码。
我在自定义模块的控制器中使用它,它可以工作。 Magento版本:1.7.0.2。
答案 1 :(得分:1)
主要问题是
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
setRedirect()
[link]接受响应代码的第二个参数;默认情况下是302。
答案 2 :(得分:1)
return
之后你是setRedirect()
吗?如果在调用setRedirect()
后发送了任何输出,则最终将忽略重定向标题。
请注意,exit
不会发送重定向标头,除非您在sendResponse()
之前调用exit
作为@benmarks提及。