12

大约一周前,我在一个新站点的测试环境中工作。我离开了一个小时,回来了,现在无法进入管理页面,如 '<a href="http://magento.localhost.com/admin" rel="nofollow noreferrer">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 年 9 月 10 日下午 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/CurrencySymbol/controllers/Adminhtml/Controller.php”

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

2013 年9 月 10 日下午 3:39 解决:好的,虽然很直白,但它已修复。我将 Alan Storm 的 var_dump 建议的输出表示为我在核心代码池的某处创建了一个错误(这不是我打算做的事情,而是使用默认代码)。不幸的是,为了准确学习,我将其全部替换为默认的核心代码池 1.7.0.2。这是在艾伦用我从未调查过的更多建议更新他的原始答案之前完成的。谢谢艾伦,你很酷。

4

4 回答 4

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

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

更新: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- 那就是您的问题。

尝试从 中删除这些配置值 ( 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'
    ));
}

controller正在用空白值 填充键。

于 2013-09-10T18:12:46.353 回答
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): Recoverable Error: 传递给 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 中定义

于 2014-01-28T12:30:02.020 回答
3

在进行任何检查之前,请检查您的配置文件 (app/etc/local.xml) 并确保您将“admin”作为frontName标记的值。前任。:

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

通常,当您尝试http://yoursite.com/admin时,它会为您提供管理区域尝试使用类似http://yoursite.com/index.php/admin的 url ,如果它有效,您可能只需要修改重写规则或遵循建议(请参阅下面的链接)

于 2015-10-28T06:18:44.920 回答
2

我在具有自定义管理 url www.shop.com/customadminroute/ 和 System -> Configuration -> Web -> URL options -> Add Store Code to Urls: Enabled 的商店遇到了这个问题

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

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

感谢 Carmen Bremen 的博客文章:

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

于 2015-04-15T14:26:44.780 回答