大约一周前,我在一个新网站的测试环境中工作。我离开了一个小时,回来了,现在无法进入管理页面,因为'http://magento.localhost.com/admin'导致了无路线404.我是唯一可以访问此页面的人,它不在任何地方感。我正在使用VBox和Ubuntu来托管环境。在可能的修复方面,到目前为止我已经尝试过......
确保将core_store,core_store_group,core_website和customer_group表id设置为0(如本文及其他许多文章[{3}}中所述)
使用/app/code/core/Mage/Core/Controller/Varien/Front.php方法_isAdminFrontNameMatched来显示adminPath(它是'admin')
清除var文件夹,清空浏览器缓存。网站的缓存已关闭。
将“index.php”添加到网址仍然会产生404。
根据http://www.nude-webdesign.com/fix-for-magento-admin-error-404-page-not-found/,我不存在'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 / 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 /应用程序/代码/核心/法师/ Authorizenet /控制器/ 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 /应用程序/代码/核心/法师/ CURRENCYSYMBOL /控制器/ Adminhtml / IndexController.php”
已解决3:39 pm 9/10/2013:好的,虽然相当直率,但仍然是固定的。我把Alan Storm的var_dump建议的输出意味着我在核心代码池中的某处创建了一个错误(这不是我打算做的事情,而是使用默认代码)。不幸的是,为了精确学习,我用1.7.0.2的默认核心代码池替换了它。这是在Alan更新他的原始答案之前完成的,并提出了我从未调查过的更多建议。谢谢艾伦,你真是太棒了。
答案 0 :(得分: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
键。
答案 1 :(得分: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
中记录了以下错误错误(3):可恢复错误:传递给Mage_Core_Model_Store :: setWebsite()的参数1必须是Mage_Core_Model_Website的一个实例,给定为null,在/.../app/code/core/Mage/Core/Model/中调用第634行的App.php,在第395行的/.../app/code/core/Mage/Core/Model/Store.php中定义
答案 2 :(得分: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的网址 如果它有效,你可能只需要修改重写规则或遵循建议(参见下面的链接)
答案 3 :(得分:2)
我在自定义管理员网站www.shop.com/customadminroute/和System - &gt;的商店中遇到此问题。配置 - &gt;网络 - &gt;网址选项 - &gt;将商店代码添加到网址:已启用
在这种情况下,以下模块应该修复它:
https://github.com/romfr/404adminlogin
感谢Carmen Bremen的博客文章:
http://neoshops.de/2012/09/07/magento-404-fehlerseite-beim-admin-login/