我们最近升级,从1.10到1.13,并具有一些问题与我们的主页。所有其他cms页面都运作正常的,但该主页是一致的回cms404.不要紧,cms页面,我们选择的主页上,它总是返回404.

商店看法是正确设定,该主页的'url'设定为cms,我找不到任何项目,在core_url_rewrite与空request_path领域。

一切工作的现在我们开发的环境。

作为停止差距解决,直到我们找到真正的解决办法,我们magento的404页设置负荷的cms页,是应该用在实际的家庭网页。用户没有注意到的差异,但主页的我们的网站仍然是技术上投掷404.

任何想法什么在这里?

编辑

罪魁祸首是一个产品与一个空url关键。直到现在,有一些情况下,在我们的产品上传工作流程的哪一个产品将得到加magento从我们的erp之前,它有一个名称。Url关键是基于生成的产品名称,因此这些产品没有url关键。在1.10这显然不是一个问题。1.13但是,对待,因为虽然我们进入了该文件根url关键。由于产品网址的重定向会取代cms重定向,magento是想要点这个产品。这是返回404因为产品标记为'不可见单独'.

有帮助吗?

解决方案

你不会摆脱这个不小的调试。以下适用于Magento CE,但应该是相关的伟EE。此外,这一章总结了大量的材料中找到的 我Magento派系列.如果你想要 真的 从事一些底调试,启动在那里。

开始,大多数的世的问题,我看见可归结为"我真的知道这件事X,但它实际上是Y"。即使你绝对肯定有事我告诉你要检查,确保实际上,你检查它。

路由伟大的主页由 Mage_Core_Controller_Varien_Router_Standard 对象。第一个关键部分就是这一行

#File: app/code/core/Mage/Core/Controller/Varien/Router/Standard.php

$p = explode('/', $this->_getDefaultPath());

_getDefaultPath 方法看起来在潮储存配置的设定值。

protected function _getDefaultPath()
{
    return Mage::getStoreConfig('web/default/front');
}

这是配置相对应

System -> Configuration -> Web -> Default Pages -> Default Web URL

特里普尔检查,这值设置的字符串

`cms`

和你的 core_config_data

select * from core_config_data where path = 'web/default/front';

不包含任何意想不到的范围值。

一旦你完成上述,添加一些临时调试代码,偷看的价值 $p 之后,这一呼吁。

$p = explode('/', $this->_getDefaultPath());
var_dump($p);
//or
Mage::Log($p);
//or
file_put_contents('/tmp/test.log',"$p\n",FILE_APPEND);

你应该看出这样的事情

array (size=1)
    0 => string '' (length=0)

array (size=1)
    0 => string 'cms' (length=3)

你的原因有两个项目被弃置/记录是的 match 方法之间共享管理的路由器和标准的路由器的对象。如果第二个项目不是一个元件阵列 cms, 那是你的问题。图什么那不是发生了,并且您将是在您的办法来解决这个问题。

假设那不是问题,Magento现在应该分派到 indexAction 方法在 IndexController.php 文件在 Mage_Cms 模块。确保这种情况下添加下面两条线路开始 indexAction

#File: app/code/core/Mage/Cms/controllers/IndexController.php
public function indexAction($coreRoute = null)
{
    $pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE);
    if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
        $this->_forward('defaultIndex');
    }
}

你应该看看 Mage_Cms_IndexController::indexAction 倾向浏览器窗口。如果这不会发生,然后还有一些关于你的系统,该系统的预防标准的路由来自正在使用的—跳回到 match 方法并找出为什么 $controller, $controllerClassName, $controllerInstance, , $action 变量没点到的 indexAction 方法在 IndexController.php 文件在 Mage_Cms 模块。(如果是这种情况下,这样说的意见,我将提供一个更新的调试scanrio为这个)

假设你正在路由这个控制器的文件和操作是否正确,删除

var_dump(__METHOD__);
exit;

和而不是添加一个新的 var_dump

$pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE);    
var_dump($pageId);  

Magento允许配置标识的网页应用的主页。的 Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE 应该对应的储存配置的路径 web/default/cms_home_page, ,这对应用的

System -> Configuration -> Web -> Default Pages -> CMS Home Page

部分。这是你告诉Magento其CMS页你要用作网页。你应该看到的东西喜欢

string 'home' (length=4)

string 'about-magento-demo-store' (length=4) 

或等等。扔到你的屏幕。这是CMS主页上标识符。如果你设置一个意想不到的价值,尝试运行以下

select * from core_config_data where path = 'web/default/cms_home_page';

检查范围限定值。不管你怎么CMS主页ID是,检查该网页的存在与以下SQL statement(假定值的 home).

select * from cms_page where identifier = 'home';

如果Magento不能找到的配置网页在你的系统,它将向404页。你可以看到,以下代码 indexAction

if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
    $this->_forward('defaultIndex');
}

如果 renderPage 返回 false, 然后我们转向 defaultIndexAction 方法,该方法使404页。

public function defaultIndexAction()
{
    $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
    $this->getResponse()->setHeader('Status','404 File not found');

    $this->loadLayout();
    $this->renderLayout();
}    

这应该是足够找到90%的"无线网页"的问题,并指你在调试的方向,为其他的10%。

其他提示

我遇到同一问题有一个空url关键为一个不活跃的类别。它没有流行起来直到我测试了重建索引EE1.13.0.0之后的升级。同样处理,404上的主页。

我可能简单化以及艾伦的侦探工作,但是我结束了只是查询新的enterprise_url_rewrite表一个空request_path.

SELECT * FROM `enterprise_url_rewrite` WHERE request_path = '';

匹配的目的避让我在请求,被劫持的主页。然后,我的固定所述的类别以及一切都很好。

这是一个已知的错误,从Magento-的建议如下:

删除从enterprise_url_rewrite在request_path=";

此外,还有若干新的脚本中的外壳的目录(请阅读的版本说明)

许可以下: CC-BY-SA归因
scroll top