Php 管理页面上的Magento404

Php 管理页面上的Magento404,php,magento,http-status-code-404,admin,Php,Magento,Http Status Code 404,Admin,大约一周前,我在一个新网站的测试环境中工作。我离开了一个小时,回来了,现在无法访问管理页面,因为“”导致没有路由404。我是唯一一个能接触到这一切的人,这不是生活在任何意义上。我正在使用VBox和Ubuntu来托管环境。就可能的修复而言,到目前为止我已经尝试过 确保core_store、core_store_group、core_website和customer_group表ID设置为0(如本文和许多其他文章所述-) 使用/app/code/core/Mage/core/Controller/

大约一周前,我在一个新网站的测试环境中工作。我离开了一个小时,回来了,现在无法访问管理页面,因为“”导致没有路由404。我是唯一一个能接触到这一切的人,这不是生活在任何意义上。我正在使用VBox和Ubuntu来托管环境。就可能的修复而言,到目前为止我已经尝试过

  • 确保core_store、core_store_group、core_website和customer_group表ID设置为0(如本文和许多其他文章所述-)

  • 使用/app/code/core/Mage/core/Controller/Varien/Front.php方法_isAdminFrontName匹配以显示adminPath(它是“admin”)

  • 清除了var文件夹,清空了浏览器缓存。站点的缓存已关闭,并且已关闭

  • 将'index.php'添加到url仍然会导致404

  • 根据,我不存在文件“app/etc/use_cache.ser”

在发生这种情况的那天,我只是在玩我复制到一个模块的一些布局文件和主题的媒体查询(所有这些问题甚至在问题开始出现之前都恢复到了原始状态)

有人对这里的问题有什么建议吗?还有其他可能发生这种情况的原因吗

谢谢你做的一切

编辑2013年10月9日下午1时06分:针对Alan Storm检索Standard.php正在查找的控制器名称的方法,我收到了许多“丢失”的控制器文件。然而,在下载了1.7.0.2的新副本以查找这些文件后,它们也不在其目录中。以下是我在Standard.php中对Alan的var_dump建议的输出:

  • …“/public_html/app/code/core/Mage/Index/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Paygate/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Paypal/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Widget/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Oauth/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Authorizenet/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Bundle/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Centinel/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Compiler/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Connect/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Downloadable/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/ImportExport/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Api2/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/PageCache/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/XmlConnect/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/Adminhtml/controllers/Controller.php”

  • “/public_html/app/code/community/Phoenix/Moneybookers/controllers/Controller.php”

  • …“/public_html/app/code/core/Mage/Captcha/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/currencycombol/controllers/Adminhtml/Controller.php”

  • …“/public_html/app/code/core/Mage/currencycombol/controllers/Adminhtml/IndexController.php”


已于2013年10月9日下午3:39解决:好的,它已修复,尽管相当直截了当。我认为Alan Storm的var_dump建议的输出意味着我在核心代码池中的某个地方创建了一个错误(这不是我想要做的事情,而是修改了默认代码)。不幸的是,为了准确的学习,我用默认的核心代码池1.7.0.2替换了所有代码。这是在艾伦用我从未调查过的更多建议更新他的原始答案之前完成的。谢谢Alan,您是rad。

无路由404错误通常表示Magento找不到它认为应该加载的控制器文件(通常是由于配置错误)

诊断此问题的最简单方法是跳到
\u validateControllerClassName

#File: app/code/core/Mage/Core/Controller/Varien/Router/Standard.php
protected function _validateControllerClassName($realModule, $controller)
{
    $controllerFileName = $this->getControllerFileName($realModule, $controller);

    if (!$this->validateControllerFileName($controllerFileName)) {  
        return false;
    }

    $controllerClassName = $this->getControllerClassName($realModule, $controller);
    if (!$controllerClassName) {
        return false;
    }

    // include controller file if needed
    if (!$this->_includeControllerClass($controllerFileName, $controllerClassName)) {
        return false;
    }

    return $controllerClassName;
}
并在返回的
false
stations周围放置一些日志记录或
var_dump
s。这将告诉您Magento正在查找哪些文件,但找不到这些文件-通常只要指出问题就足够了

    if (!$this->validateControllerFileName($controllerFileName)) {  
        var_dump($controllerFileName);
        return false;
    }

    $controllerClassName = $this->getControllerClassName($realModule, $controller);
    if (!$controllerClassName) {
        var_dump($controllerClassName);
        return false;
    }

    // include controller file if needed
    if (!$this->_includeControllerClass($controllerFileName, $controllerClassName)) {
        var_dump("Couldn't include: $controllerFileName");
        return false;
    }
更新:Magento在多个位置查找控制器文件是正常的-每个注册为包含adminhtml控制器文件的模块都需要检查

但是,几乎所有正在查找的控制器文件都命名为
/controller.php
。对于默认的
/admin
索引页,这应该是
IndexController.php
。这使我认为您的系统应该查找一个名称为空的控制器(可能是默认的控制器值,因为
/admin
(而不是
admin/index
)是您正在使用的URL)

可能发生这种情况的原因有很多——很多都是围绕正在更改的核心文件或模块中的配置节点设置为错误的值。如果下面的解决方案对您不起作用,您需要尝试区分您的代码库和干净的代码库,禁用每个自定义模块,如果修复了这些问题,请重新打开模块,直到找到问题模块,或者深入调试Magento路由代码,以找出系统不满意的原因

此行为的一个常见原因是,在上为自定义管理路径设置了无效值(或根本没有值)

System -> Configuration -> Admin -> Admin Base URL -> Use Custom Admin Path
如果“自定义管理”的值
select * from core_config_data where path like '%custom_path%';    
...
292 default 0   admin/url/use_custom_path   1
293 default 0   admin/url/custom_path   admin/
#File: app/code/core/Mage/Core/Controller/Varien/Router/Admin.php
public function fetchDefault()
{
    // set defaults
    $d = explode('/', $this->_getDefaultPath());
    $this->getFront()->setDefault(array(
        'module'     => !empty($d[0]) ? $d[0] : '',
        'controller' => !empty($d[1]) ? $d[1] : 'index',
        'action'     => !empty($d[2]) ? $d[2] : 'index'
    ));
}
SET SQL_SAFE_UPDATES=0;
SET FOREIGN_KEY_CHECKS=0;
UPDATE `core_store` SET store_id = 0 WHERE code='admin';
UPDATE `core_store_group` SET group_id = 0 WHERE name='Default';
UPDATE `core_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;
SET SQL_SAFE_UPDATES=1;
<adminhtml>
  <args>
    <frontName><![CDATA[admin]]></frontName>
  </args>
</adminhtml>