0

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

4

3 回答 3

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。

于 2013-06-25T07:53:09.840 回答
1

return马上之后setRedirect()吗?如果在调用后发送任何输出,setRedirect()则重定向标头最终将被忽略。

请记住exit,除非您像@benmarks 提到的那样调用sendResponse()过,否则也不会发送重定向标头。exit

于 2012-11-30T08:31:23.950 回答
1

主要问题是

Mage::app()->getFrontController()->getResponse()->setRedirect($url);

setRedirect()[link]接受响应代码的第二个参数;默认为 302。

于 2012-10-30T12:11:58.177 回答