管理员页面上的Magento 404

大约一个星期前,我在一个新网站的测试环境中工作。 我离开了一个小时,回来了,现在无法进入管理页面,就像'http://magento.localhost.com/admin'结果在No Route 404中一样。我是唯一一个可以访问这个页面的人,它没有任何意义。 我在Ubuntu上使用VBox来托管环境。 就可能的修复方面而言,到目前为止我已经尝试过......

  • 确保core_store,core_store_group,core_website和customer_group表ID被设置为0(如本文和许多其他文章中所述 - http://www.nude-webdesign.com/fix-for-magento-admin-error-404-找不到网页/)

  • 使用/app/code/core/Mage/Core/Controller/Varien/Front.php方法播放_isAdminFrontNameMatched以显示adminPath(它是'admin')

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

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

  • 根据Magento Admin 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 /应用/代码/核心/法师/索引/控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/付款网关/控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/贝宝/控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/空间/控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/的Oauth /控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/ Authorizenet /控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/捆绑/控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/ Centinel /控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/编译器/控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/连接/控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/下载/控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/ ImportExport /控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/ API2 /控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/页缓存器/控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/ XmlConnect /控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/ Adminhtml /控制器/ Controller.php这样”

  • ... “/的public_html /应用/代码/社区/凤凰/ Moneybookers的/控制器/ Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/验证码器/控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/ CURRENCYSYMBOL /控制器/ Adminhtml / Controller.php这样”

  • ... “/的public_html /应用程序/代码/核心/法师/ CURRENCYSYMBOL /控制器/ Adminhtml / IndexController.php”

  • 已解决下午3点39分2013年9月10日:好的,虽然说得很直白,但它是固定的。 我将Alan Storm的var_dump建议的输出结果表示我在核心代码池的某个地方创建了一个错误(这不是我想要做的事情,而是使用默认代码)。 不幸的是,为了确切学习,我用1.7.0.2的默认核心代码池替换了它。 这是在Alan更新他的原始答案之前完成的,我从未调查过更多的建议。 谢谢艾伦,你是拉德。


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

    诊断这个最简单的方法是跳到_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语句周围放下一些日志或var_dump 。 这应该告诉你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
    

    如果“自定义管理路径”的值为空,或包含和/ ,则可能会干扰路由。

    由于您无法访问管理员,请尝试运行以下SQL查询

    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/
    

    如果您看到与上述类似的结果,或者admin/url/custom_path为空/不存在,但admin/url/use_custom_path仍然为1 - 那么这就是您的问题。

    尝试从core_config_data删除这些配置值( admin/url/use_custom_path )和( admin/url/use_custom_path )。

    如果这不适用于您的系统,那么根据我的空白控制器,我最好的猜测将是代码处于某种未知原因

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

    正在填充空白值的controller密钥。


    在我的情况下,我的管理员给我404,因为没有商店设置。 我通过运行以下查询来解决它

    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;
    

    你可以检查你是否在var / log / system.log中记录了下面的错误

    ERR(3):可恢复的错误:传递给Mage_Core_Model_Store :: setWebsite()的参数1必须是Mage_Core_Model_Website的实例,null给出,在/.../app/code/core/Mage/Core/Model/App.php中调用在第634行,并在第395行的/.../app/code/core/Mage/Core/Model/Store.php中定义


    在任何事情检查你的配置文件(app / etc / local.xml)之前,并确保你有“admin”作为frontName标记的值。 例:

    <adminhtml>
      <args>
        <frontName><![CDATA[admin]]></frontName>
      </args>
    </adminhtml>
    

    通常当你尝试http://yoursite.com/admin它给你的管理区域尝试使用像http://yoursite.com/index.php/admin的网址,如果它的工作可能只需要修改重写规则或遵循建议(请参阅下面的链接)

    链接地址: http://www.djcxy.com/p/65181.html

    上一篇: Magento 404 on Admin Page

    下一篇: Sort Orders by Customer Groups in magento 1.7