管理页面上的Magento 404

oob*_*000 12 php admin magento http-status-code-404

大约一周前,我在一个新网站的测试环境中工作.我离开了一个小时,回来了,现在无法进入管理页面,因为在' 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'文件.

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

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

谢谢你的一切.

编辑1:06 pm 9/10/2013:为了回应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"

2013年10月9日下午3点39分解决:好的,虽然相当直率,但仍然是固定的.我把Alan Storm的var_dump建议的输出意味着我在核心代码池中的某个地方创建了一个错误(这不是我打算做的事情,而是使用默认代码).不幸的是,为了精确学习,我用1.7.0.2的默认核心代码池替换了它.这是在Alan更新他的原始答案之前完成的,并提出了我从未调查过的更多建议.谢谢艾伦,你真是太棒了.

Ala*_*orm 22

无路由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;
}
Run Code Online (Sandbox Code Playgroud)

var_dump在返回false声明周围删除一些日志记录或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;
    }
Run Code Online (Sandbox Code Playgroud)

更新:Magento在多个位置查找控制器文件是正常的 - 需要检查注册为包含adminhtml控制器文件的每个模块.

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

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

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

System -> Configuration -> Admin -> Admin Base URL -> Use Custom Admin Path
Run Code Online (Sandbox Code Playgroud)

如果"自定义管理路径"的值为空,或包含和附加/,则可能会干扰路由.

由于您无法访问管理员,请尝试运行以下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/
Run Code Online (Sandbox Code Playgroud)

如果你看到类似于上面的结果,或者admin/url/custom_path是空白/不存在但admin/url/use_custom_path仍然存在1- 那么这就是你的问题.

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

如果这不适用于您的系统,根据我的空白控制器理论,我最好的猜测是由于某些未知原因的代码

#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'
    ));
}
Run Code Online (Sandbox Code Playgroud)

controller用空值填充键.


Ric*_*ins 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;
Run Code Online (Sandbox Code Playgroud)

您可以检查是否在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中定义