Magento:将用户重定向到404页面

时间:2012-10-30 10:23:31

标签: magento magento-1.7

以下问题:在某些情况下,我希望将用户重定向到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。 什么提示我做错了什么?

3 个答案:

答案 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提及。