web-dev-qa-db-fra.com

Magento 404 sur la page d'administration

Il y a environ une semaine, je travaillais dans un environnement de test pour un nouveau site. Je suis parti pendant une heure, je suis revenu et maintenant je ne peux pas accéder à la page d'administration, car dans ' http://magento.localhost.com/admin ', il en résulte un No Route 404. Je suis le un seul avec accès à cela, ce n'est pas vivre en aucun sens. J'utilise VBox avec Ubuntu pour héberger l'environnement. En termes de correctifs possibles, jusqu'à présent, j'ai essayé…

  • Assurez-vous que les identifiants des tables core_store, core_store_group, core_website et customer_group sont définis sur 0 (comme décrit dans cet article et dans de nombreux autres articles - http://www.nude-webdesign.com/fix-for-magento-admin- error-404-page-not-found / )

  • Jouer avec la méthode /app/code/core/Mage/Core/Controller/Varien/Front.php _isAdminFrontNameMatched pour afficher l'adminPath (c'est "admin")

  • Vider le dossier var, vider le cache du navigateur. La mise en cache du site a été et est désactivée.

  • L'ajout de 'index.php' à l'URL donne toujours un 404.

  • Selon Magento Admin 404 , le fichier 'app/etc/use_cache.ser' n'existe pas pour moi.

Le jour de cet événement, je jouais simplement avec certains fichiers de mise en page que j'avais copiés dans un module que j'avais créé et les requêtes multimédias du thème (qui étaient toutes retournées à leur état d'origine avant même que ce problème ne se produise).

Quelqu'un a-t-il des suggestions sur ce qui ne va pas ici? D'autres raisons possibles pourraient-elles se produire?

Merci pour tout.

EDIT 1:06 pm 9/10/2013: En réponse à la méthode d'Alan Storm pour récupérer les noms de contrôleurs que Standard.php recherche, on m'a retourné beaucoup fichiers de contrôleur "manquants". Cependant, après avoir téléchargé une nouvelle copie de 1.7.0.2 pour trouver ces fichiers, ils n'étaient pas présents non plus. Voici ma sortie de la suggestion var_dump d'Alan dans Standard.php:

  • ... "/ 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"

Résolu 15h39 9/10/2013: D'accord, c'est résolu quoique plutôt brutalement. J'ai pris la sortie de la suggestion var_dump d'Alan Storm pour signifier que j'avais créé une erreur quelque part dans le pool de code principal (ce que je n'avais pas l'intention de faire, visser avec le code par défaut). Malheureusement pour des raisons d'apprentissage exact, j'ai ensuite tout remplacé par le pool de codes de base par défaut de 1.7.0.2. Cela a été fait avant qu'Alan ne mette à jour sa réponse originale avec plus de suggestions que je n'ai jamais étudiées. Merci Alan, tu es rad.

12
ooblek6000

Une erreur d'absence de route 404 indique généralement que Magento ne peut pas trouver le fichier de contrôleur qu'il pense qu'il devrait charger (généralement en raison d'une mauvaise configuration)

La façon la plus simple de diagnostiquer cela est de sauter à _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;
}

et supprimez quelques journaux ou var_dump s autour des instructions de retour false. Cela devrait vous dire quels fichiers Magento recherche et ne trouve pas - c'est généralement suffisant pour signaler le problème.

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

Mise à jour: Il est normal que Magento recherche le fichier de contrôleur à plusieurs endroits - chaque module enregistré comme contenant des fichiers de contrôleur adminhtml doit être vérifié.

Cependant, presque tous les fichiers de contrôleur recherchés sont nommés /Controller.php. Pour la page d'index par défaut /admin, Cela devrait être IndexController.php. Cela me fait penser que votre système pense qu'il est censé rechercher un contrôleur avec un nom vide, (probablement la valeur par défaut du contrôleur puisque /admin (Et non admin/index) Est l'URL que vous utilisez)

Il y a une myriade de raisons pour lesquelles cela pourrait se produire - beaucoup tournent autour d'un fichier de base en cours de modification ou d'un nœud de configuration dans un module défini sur la mauvaise valeur. Si les solutions ci-dessous ne fonctionnent pas pour vous, vous devrez essayer de faire la différence entre votre base de code et une base propre, en désactivant chaque module personnalisé et si cela corrige les modules de nouveau sous tension jusqu'à ce que le module problématique soit trouvé, ou plonger profondément dans le débogage du code de routage Magento pour comprendre pourquoi votre système n'est pas satisfait.

Une cause courante de ce comportement est une valeur non valide (ou aucune valeur du tout) définie pour un chemin d’administration personnalisé à

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

Si la valeur de "chemin administrateur personnalisé" est vide, ou contient et / Supplémentaire, cela peut interférer avec le routage.

Comme vous ne pouvez pas accéder à l'administrateur, essayez d'exécuter la requête SQL suivante

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/

Si vous voyez des résultats similaires à ceux ci-dessus, ou admin/url/custom_path Est vide/non présent mais admin/url/use_custom_path Est toujours 1 - alors c'est votre problème.

Essayez de supprimer ces valeurs de configuration (admin/url/use_custom_path) Et (admin/url/use_custom_path) De core_config_data.

Si cela ne s'applique pas à votre système, selon mon contrôleur vierge, ma meilleure supposition serait pour une raison inconnue le code à

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

remplit la clé controller avec une valeur vide.

22
Alan Storm

Dans mon cas, mon administrateur m'a donné 404 car il n'y a pas de magasin. Je l'ai résolu en exécutant la requête suivante

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;

Vous pouvez vérifier si vous obtenez l'erreur ci-dessous enregistrée dans var/log/system.log

ERR (3): erreur récupérable: l'argument 1 passé à Mage_Core_Model_Store :: setWebsite () doit être une instance de Mage_Core_Model_Website, null donné, appelé dans /.../app/code/core/Mage/Core/Model/App.php sur la ligne 634 et défini dans /.../app/code/core/Mage/Core/Model/Store.php sur la ligne 395

12
Ricardo Martins

Avant toute chose, vérifiez votre fichier de configuration (app/etc/local.xml) et assurez-vous que vous avez "admin" comme valeur pour la balise frontName. ex.:

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

Habituellement, lorsque vous essayez http://votresite.com/admin il vous donne la zone d'administration Essayez d'utiliser une URL comme ça http://votresite.com/index.php/admin et si cela fonctionne probablement, vous devez uniquement modifier les règles de réécriture ou suivre les suggestions (voir le lien ci-dessous)

3
Keyur

J'ai rencontré ce problème dans une boutique avec une URL d'administration personnalisée www.shop.com/customadminroute/ et Système -> Configuration -> Web -> Options URL -> Ajouter le code de magasin aux URL: activé

Dans ce cas, le module suivant devrait le réparer:

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

Merci au blog de Carmen Bremen:

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

2
ahe_borriglione