Question

Nous avons récemment mis à jour 1,10 à 1,13 et que vous rencontrez des problèmes avec notre page d'accueil. Toutes les autres pages cms fonctionnent correctement, mais la page d'accueil est toujours un retour cm 404. Peu importe qui Cms page que nous choisissons d'être la page d'accueil, il retourne toujours 404.

Le point de vue du magasin est correctement configuré, la page d'accueil « url » est réglé sur cm, et je ne peux pas trouver toutes les entrées dans core_url_rewrite avec un champ vide request_path.

Tout fonctionnait bien dans notre environnement dev.

Comme solution palliative jusqu'à ce qu'on trouve une solution réelle, nous avons la page de magento 404 du jeu pour charger la page cms qui est censé être utilisé dans la page d'accueil réelle. Les utilisateurs ne remarquent pas la différence, mais la page d'accueil de notre site est toujours jeter techniquement un 404.

Toute réflexion sur ce qui se passe ici?

EDIT

Le coupable était un produit avec une clé url vide. Jusqu'à présent, il y avait des cas dans notre flux de téléchargement de produits où un produit serait ajoutés à magento de notre erp avant qu'il ait un nom. La clé URL est générée en fonction du nom du produit, de sorte que ces produits ont aucune clé url. Dans ce 1.10 était apparemment pas un problème. 1.13 cependant, que traite comme si nous sommes entrés dans la racine du document comme la clé url. Depuis réoriente url produit CMS annulent et remplacent réoriente, magento essayait de point de ce produit. Il rentrait 404 parce que le produit a été marqué comme «non visible individuellement.

Était-ce utile?

La solution

Vous n'allez pas sortir de cela sans un peu de débogage. Ce qui suit s'applique à Magento CE, mais devrait être pertinent pour Magento EE. En outre, cet article résume beaucoup de matériel dans ma série Dispatch Magento. Si vous voulez vraiment engager dans une mise au point bas vers le haut, commencer par là.

Pour commencer, la plupart des problèmes que je vois Magento bouillir jusqu'à « Je suis vraiment sûr que cette chose était X, mais il était en fait Y ». Même si vous êtes absolument sûr de quelque chose que je vous dis de vérifier, assurez-vous de vérifier réellement.

Le routage pour le site web de Magento est gérée par l'objet Mage_Core_Controller_Varien_Router_Standard. La première partie clé est cette ligne

#File: app/code/core/Mage/Core/Controller/Varien/Router/Standard.php

$p = explode('/', $this->_getDefaultPath());

La méthode de _getDefaultPath regarde votre config magasin Magento pour la valeur de consigne.

protected function _getDefaultPath()
{
    return Mage::getStoreConfig('web/default/front');
}

qui est la configuration qui correspond à

System -> Configuration -> Web -> Default Pages -> Default Web URL

Tripple vérifier que cette valeur est définie sur la chaîne

`cms`

et que votre table core_config_data

select * from core_config_data where path = 'web/default/front';

ne contient pas de valeurs scope inattendues.

Une fois que vous avez fait ci-dessus, ajoutez un code de débogage temporaire coup d'oeil à la valeur de $p après cet appel.

$p = explode('/', $this->_getDefaultPath());
var_dump($p);
//or
Mage::Log($p);
//or
file_put_contents('/tmp/test.log',"$p\n",FILE_APPEND);

Vous devriez voir quelque chose de sortie comme ceci

array (size=1)
    0 => string '' (length=0)

array (size=1)
    0 => string 'cms' (length=3)

La raison pour laquelle vous avez deux éléments étant est la méthode match objet d'un dumping / connecté est partagée entre le routeur d'administration et l'objet routeur standard. Si le deuxième article est un tableau à une élément avec cms, qui est votre problème. Calculez ce qui ne se produit pas, et vous serez sur votre chemin pour résoudre le problème.

En supposant que ce n'est pas le problème, Magento devrait envoyer maintenant à la méthode indexAction dans le fichier IndexController.php dans le module Mage_Cms. Assurez-vous que c'est le cas en ajoutant les deux lignes au début de indexAction

suivantes
#File: app/code/core/Mage/Cms/controllers/IndexController.php
public function indexAction($coreRoute = null)
{
    $pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE);
    if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
        $this->_forward('defaultIndex');
    }
}

Vous devriez voir Mage_Cms_IndexController::indexAction de dumping vers la fenêtre du navigateur. Si cela ne se produit pas, alors il y a quelque chose au sujet de votre système qui empêche des routage standard à partir d'être utilisé - revenir en arrière dans la méthode match et savoir pourquoi $controller, $controllerClassName, $controllerInstance et variables $action ne pointent pas vers la méthode indexAction dans le fichier IndexController.php dans le module Mage_Cms. (Si tel est le cas, dites dans les commentaires et je vais vous donner une mise à jour de débogage scanrio pour cela)

En supposant que vous êtes routé vers ce fichier contrôleur et l'action correctement, retirez le

var_dump(__METHOD__);
exit;

et ajouter à la place un nouveau var_dump

$pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE);    
var_dump($pageId);  

Magento vous permet de configurer l'identifiant de la page qui doit être utilisé comme page d'accueil. Le Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE devrait correspond avec le chemin configuration du magasin web/default/cms_home_page, ce qui correspond au

System -> Configuration -> Web -> Default Pages -> CMS Home Page
section

. C'est là que vous dites Magento quelle page CMS vous souhaitez utiliser comme votre page d'accueil. Vous devriez voir quelque chose comme

string 'home' (length=4)

ou

string 'about-magento-demo-store' (length=4) 

ou etc. déversée à votre écran. Ceci est l'identificateur de page d'accueil CMS. Si vous définissez une valeur inattendue, essayez d'exécuter ce qui suit

select * from core_config_data where path = 'web/default/cms_home_page';

pour vérifier les valeurs scope. Peu importe ce que vous CMS Page d'accueil ID est, vérifier l'existence de la page avec l'instruction SQL suivante (en supposant une valeur de home).

select * from cms_page where identifier = 'home';

Si Magento ne peut pas trouver la page configurée dans votre système, il transmettra à la page 404. Vous pouvez voir que le code suivant dans indexAction

if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
    $this->_forward('defaultIndex');
}

Si retourne renderPage false, nous sommes transmis à la méthode defaultIndexAction qui rend la page 404.

public function defaultIndexAction()
{
    $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
    $this->getResponse()->setHeader('Status','404 File not found');

    $this->loadLayout();
    $this->renderLayout();
}    

Cela devrait être suffisant pour trouver 90% de votre « pas de route vers la page d'accueil » des problèmes, et vous orienter dans une direction de débogage pour les 10% restants.

Autres conseils

je suis tombé sur ce même problème avec une clé url vide pour une catégorie inactive. Il n'a pas pop-up jusqu'à ce que je l'ai testé réindexation en EE 1.13.0.0 après la mise à niveau. Même affaire, 404 sur la page d'accueil.

Je suis probablement bien trop simplifier le travail de détective d'Alan, mais je fini juste interroger la nouvelle table enterprise_url_rewrite pour un request_path vide.

SELECT * FROM `enterprise_url_rewrite` WHERE request_path = '';

Le TARGET_PATH correspondant me clued à la demande qui a été Détournement la page d'accueil. Ensuite, je fixe dit catégorie et tout allait bien.

Ceci est un bug connu de Magento - Le recommandons d'exécuter ce qui suit:

Supprimer de la enterprise_url_rewrite OÙ request_path = '';

En outre, il existe un certain nombre de nouveaux scripts dans le répertoire shell (S'il vous plaît lire les notes de version)

Probablement ce problème ici .. Vérifiez votre ids groupe importés http: // blog.chapagain.com.np/magento-solution-to-error-404-not-found-in-admin-login-page/

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top