我已经为Magento编写了一个扩展程序,它将在某些情况下从控制器启动404重定向。控制器中导致404重定向的代码是:
$this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
$this->getResponse()->setHeader('Status','404 File not found');
$pageId = Mage::getStoreConfig('web/default/cms_no_route');
if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
$this->_forward('defaultNoRoute');
}
可通过网址www.mysite.com/mymodule/index/action?name=value访问此代码,并根据“值”触发重定向。
但是,因为我的模块包含覆盖根节点的布局更新:
<layout version="0.1.0">
<mynamespace_mymodule_index_action>
<block type="mymodule/list" name="root" template="mynamespace/mymodule/list.phtml" output="toHtml" />
</mynamespace_mymodule_index_action>
</layout>
404重定向显示空白(白色)页面,其中包含以下HTML:
<head>
</head>
<body>
<div id="outerdivshade">
<div id="outerdivpadding">
<div class="wrapper">
<div class="page">
<div class="main-container col2-left-layout">
<div class="main">
<div class="col-main"></div>
<div class="col-left sidebar"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
我猜测通过更新根节点,我留下了一个布局结构,重定向代码无法使用它来创建完整的404页面。
删除if语句并只留下代码:
$this->_forward('defaultNoRoute');
一切正常,但我不明白这样做的利弊。
有趣的是,上面的代码在Magento 1.6上正常工作,但在1.7上没有。
我很感激正确包含工作404重定向的方式的任何评论,但仍然允许我在布局中使用我自己的根节点。
由于
答案 0 :(得分:22)
要显示404页面,您可以拨打norouteAction
课程的Mage_Core_Controller_Varien_Action
。
$this->norouteAction();
return;
可以在后端编辑404页面。该网页标题为404 Not Found 1
。
您还可以在其中添加自定义布局更新XML。