首页 文章

管理页面上的Magento 404

提问于
浏览
12

大约一周前,我在一个新网站的测试环境中工作 . 我离开了一个小时,回来了,现在无法进入管理页面,因为'http://magento.localhost.com/admin'导致了无路线404.我是唯一一个可以访问它的人,它在任何意义上都没有 . 我正在使用VBox和Ubuntu来托管环境 . 在可能的修复方面,到目前为止我已经尝试过......

  • 确保将core_store,core_store_group,core_website和customer_group表id设置为0(如本文和许多其他文章中所述 - http://www.nude-webdesign.com/fix-for-magento-admin-error-404-page-not-found/

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

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

  • 将“index.php”添加到网址仍然会产生404 .

  • 根据Magento Admin 404,文件'app/etc/use_cache.ser'对我来说不存在 .

在发生这一天的那天,我只是简单地玩了一些我复制到我制作的模块的布局文件和主题的媒体查询(所有这些都在这个问题开始发生之前就恢复到原始状态) .

有没有人对这里有什么问题有任何建议?这可能发生的任何其他可能的原因?

谢谢你的一切 .

EDIT 1:06pm 9/10/2013: 响应Alan Storm 's method of retrieving controller names that Standard.php is looking for, I was returned many 1132203 controller files. However, after downloading a fresh copy of 1.7.0.2 to find those files, they weren' t出现在他们中间 . 以下是我在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 / CurrencySymbol / controllers / Adminhtml / Controller.php”

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

Resolved 3:39pm 9/10/2013: 好吧,它's fixed albeit rather bluntly. I took the output of Alan Storm'的var_dump建议意味着我在核心代码池的某个地方创建了一个错误(这不是我打算做的事情,拧紧默认代码) . 不幸的是,为了精确学习,我用1.7.0.2的默认核心代码池替换了它 . 这是在Alan更新他的原始答案之前完成的,并提出了我从未调查过的更多建议 . 谢谢艾伦,你真是太棒了 .

4 回答

  • 3

    我在自定义管理员网站www.shop.com/customadminroute/和系统 - >配置 - >网络 - >网址选项 - >添加商店代码到网址的商店中遇到此问题:已启用

    在这种情况下,以下模块应该修复它:

    https://github.com/romfr/404adminlogin

    感谢Carmen Bremen的博客文章:

    http://neoshops.de/2012/09/07/magento-404-fehlerseite-beim-admin-login/

  • 12

    在我的情况下,我的管理员给了我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的实例,在/.../app/code/core/Mage/Core/Model/App中调用null . php在634行,在第395行的/.../app/code/core/Mage/Core/Model/Store.php中定义

  • 21

    在任何事情之前检查您的配置文件(app / etc / local.xml)并确保"admin"_为 frontName 标记的值 . 例:

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

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

  • 2

    无路由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正在寻找哪些文件,并且't find — it'通常足以指出问题 .

    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;
        }
    

    Update :Magento在多个地方查找控制器文件是正常的 - 每个注册为包含adminhtml控制器文件的模块都需要进行检查 .

    但是,几乎所有要查找的控制器文件都被命名为 /Controller.php . 对于默认的 /admin 索引页面,这应该是 IndexController.php . 这让我觉得你的系统认为它应该寻找一个空白名称的控制器(可能是 /admin (而不是 admin/index )的默认控制器值是你正在使用的URL)

    有很多原因会发生这种情况 - 很多原因都是围绕正在更改的核心文件或模块中的配置节点设置为错误的值 . 如果下面的解决方案不适合你,你需要尝试区分你的代码库而不是干净的代码库,禁用每个自定义模块,如果修复的东西会重新启动模块,直到找到问题模块或潜水深入调试Magento路由代码,找出你的系统不满意的原因 .

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

    System -> Configuration -> Admin -> Admin Base URL -> Use Custom Admin Path
    

    如果"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 键 .

相关问题