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

カスタムモジュールのコントローラー内で使用しましたが、動作します。マジェントのバージョン: 1.7.0.2。

于 2013-06-25T07:53:09.840 に答える
1

return直後setRedirect()ですか?が呼び出された後に出力が送信された場合setRedirect()、リダイレクト ヘッダーは最終的に無視されます。

@benmarksが言及されているように、前にexit呼び出さない限り、リダイレクト ヘッダーも送信されないことに注意してください。sendResponse()exit

于 2012-11-30T08:31:23.950 に答える
1

主な問題は

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

setRedirect()[リンク]応答コードの 2 番目のパラメーターを受け入れます。デフォルトでは 302 です。

于 2012-10-30T12:11:58.177 に答える