【问题标题】:Magento: Redirect User to 404 PageMagento:将用户重定向到 404 页面
【发布时间】:2013-06-25 15:53:09
【问题描述】:

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

【问题讨论】:

    标签: magento magento-1.7


    【解决方案1】:

    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');
        }
    

    我从/app/code/core/Mage/Cms/controllers/IndexController.php 中的noRouteAction 函数复制了这段代码。

    我在自定义模块的控制器中使用它,它可以工作。 Magento 版本:1.7.0.2。

    【讨论】:

      【解决方案2】:

      主要问题是

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

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

      【讨论】:

      • 我建议在调用setRedirect() 之后调用$this->getResponse()->sendResponse(); exit; 作为调试步骤。但是setRedirect($url, 404) 应该可以工作。
      • 不起作用。 HTTP状态码302 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, 404); Mage::app()->getFrontController()->getResponse()->sendResponse();退出;
      【解决方案3】:

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

      请记住,exit 也不会让重定向标头发送,除非您在 @benmarks 提到的 exit 之前调用 sendResponse()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-29
        • 2015-08-01
        相关资源
        最近更新 更多