Frage

Wir haben kürzlich von 1.10 auf 1,13 aktualisiert und haben einige Probleme mit unserer Homepage. Alle anderen CMS -Seiten funktionieren ordnungsgemäß, aber die Startseite gibt konsequent ein CMS 404 zurück. Es spielt keine Rolle, welche CMS -Seite wir für die Startseite sind, sie gibt immer 404 zurück.

Die Store -Ansicht ist ordnungsgemäß festgelegt, die Homepage 'URL' ist auf CMS eingestellt, und ich kann keine Einträge in Core_url_rewrite mit einem Leer -Request_Path -Feld finden.

Alles hat in unserer Entwicklerumgebung gut funktioniert.

Als Stop -Lap -Fix, bis wir eine echte Lösung finden, haben wir Magentos 404 -Seite eingestellt, um die CMS -Seite zu laden, die auf der tatsächlichen Startseite verwendet werden soll. Benutzer bemerken keinen Unterschied, aber die Startseite unserer Website wirft technisch einen 404.

Irgendwelche Gedanken darüber, was hier los ist?

BEARBEITEN

Der Täter war ein Produkt mit einem leeren URL -Schlüssel. Bisher gab es einige Fälle in unserem Produkt -Upload -Workflow, in dem ein Produkt von unserem ERP zu Magento hinzugefügt wird, bevor es einen Namen hat. Der URL -Schlüssel wird basierend auf dem Produktnamen generiert, sodass diese Produkte keinen URL -Schlüssel haben. In 1.10 war dies anscheinend kein Problem. 1.13 behandelt jedoch das, als hätten wir das Dokumentwurzel als URL -Schlüssel eingegeben. Da Produkt -URL -Umleitungen von CMS -Weiterleitungen abgelöst werden, versuchte Magento, dieses Produkt zu verweisen. Es kehrte 404 zurück, weil das Produkt als „nicht einzeln sichtbar“ gekennzeichnet war.

War es hilfreich?

Lösung

Sie werden nicht ohne ein wenig Debuggen rauskommen. Das Folgende gilt für Magento CE, sollte jedoch für Magento EE relevant sein. Außerdem fasst dieser Beitrag eine Menge Material zusammen, die in gefunden wurden Meine Magento -Versandserie. Wenn Sie wollen Ja wirklich Gehen Sie an einem Bottom -up -Debuggen ein, beginnen Sie dort.

Zu Beginn, die meisten Magento -Probleme, die ich auf "Ich war mir wirklich sicher, dass diese Sache X war, aber es war eigentlich Y". Selbst wenn Sie sich absolut sicher sind, dass Sie Ihnen sage, dass Sie es überprüfen sollen, stellen Sie sicher, dass Sie es tatsächlich überprüfen.

Das Routing für Magentos Homepage wird von der behandelt Mage_Core_Controller_Varien_Router_Standard Objekt. Der erste Schlüsselteil ist diese Zeile

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

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

Das _getDefaultPath Die Methode befasst sich mit Ihrer Magento Store -Konfiguration für den festgelegten Wert.

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

Welches ist die Konfiguration, die entspricht

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

Tripple überprüfen Sie, ob dieser Wert auf die Zeichenfolge gesetzt ist

`cms`

Und dass dein core_config_data Tisch

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

Enthält keine unerwarteten Scoped -Werte.

Wenn Sie das oben genannte getan haben, fügen Sie einen temporären Debugging -Code hinzu, um zum Wert von zu schauen $p Nach diesem Anruf.

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

Sie sollten so etwas ausgeben sehen

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

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

Der Grund, warum Sie zwei Gegenstände haben, die abgeladen/protokolliert werden, ist die match Die Methode wird zwischen dem Admin -Router und dem Standard -Router -Objekt geteilt. Wenn das zweite Element kein Elementarray mit kein Element ist cms, das ist dein Problem. Finden Sie heraus, was das nicht passiert, und Sie werden auf dem Weg sein, das Problem zu lösen.

Angenommen, das ist nicht das Problem, sollte Magento nun an die entsenden indexAction Methode in der IndexController.php Datei in der Mage_Cms Modul. Stellen Sie sicher, dass dies der Fall ist, indem Sie die folgenden zwei Zeilen zu Beginn von hinzufügen indexAction

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

Das solltest du sehen Mage_Cms_IndexController::indexAction in das Browserfenster abgeladen. Wenn dies nicht der Fall ist, hat Ihr System etwas, das verhindert, dass das Standard -Routing verwendet wird. Springen Sie wieder in die match Methode und herausfinden warum $controller, $controllerClassName, $controllerInstance, und $action Variablen verweisen nicht auf die indexAction Methode in der IndexController.php Datei in der Mage_Cms Modul. (Wenn dies der Fall ist, sagen Sie dies in den Kommentaren und ich werde ein Update -Debugging -Scanrio dafür anbieten.)

Angenommen, Sie werden in diese Controller -Datei und -aktion korrekt weitergeleitet, entfernen Sie die

var_dump(__METHOD__);
exit;

und stattdessen eine neue hinzufügen var_dump

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

Mit Magento können Sie die Kennung der Seite konfigurieren, die als Startseite verwendet werden sollte. Das Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE sollte dem Store -Konfigurationsweg entsprechen web/default/cms_home_page, was dem entspricht, dem

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

Sektion. Hier teilen Sie Magento mit, welche CMS -Seite Sie als Homepage verwenden möchten. Sie sollten so etwas sehen wie

string 'home' (length=4)

oder

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

oder usw. auf Ihren Bildschirm abgeladen. Dies ist die CMS -Homepage -Kennung. Wenn Sie einen unerwarteten Wert festlegen, versuchen Sie Folgendes ausführen

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

nach Scoped -Werten prüfen. Unabhängig von Ihrer CMS -Homepage -ID finden Sie die Existenz der Seite mit der folgenden SQL -Anweisung (unter der Annahme eines Wertes von home).

select * from cms_page where identifier = 'home';

Wenn Magento die konfigurierte Seite in Ihrem System nicht finden kann, wird sie an die 404 -Seite weitergeleitet. Sie können das mit dem folgenden Code in sehen indexAction

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

Wenn renderPage kehrt zurück false, dann werden wir an die weitergeleitet defaultIndexAction Methode, die die 404 -Seite macht.

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

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

Das sollte ausreichen, um 90% Ihrer "No Route to Homepage" -Probleme zu finden und Sie in eine Debugging -Richtung für die anderen 10% zu verweisen.

Andere Tipps

Ich bin mit einem leeren URL -Schlüssel für eine inaktive Kategorie auf dasselbe Problem gestoßen. Es tauchte erst auf, als ich die Reindedexing in EE 1.13.0.0 nach dem Upgrade getestet habe. Gleicher Deal, 404 auf der Startseite.

Ich bin wahrscheinlich gut zu verhindern, dass Alans Detektivarbeit die Detective -Arbeit hat, aber am Ende habe ich nur die neue Enterprise_url_rewrite -Tabelle nach einem leeren Request_Path abfragen.

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

Der passende Target_Path hat mich an die Anfrage hingewiesen, die die Startseite entführte. Dann habe ich diese Kategorie behoben und alles war gut.

Dies ist ein bekannter Fehler von Magento - der empfehlen, Folgendes auszuführen:

Löschen von Enterprise_url_rewrite wobei Request_path = '';

Außerdem gibt es eine Anzahl neuer Skripte im Shell -Verzeichnis (bitte lesen Sie die Versionshinweise)

Wahrscheinlich dieses Problem hier. Überprüfen Sie Ihre importierten Gruppen -IDshttp://blog.chapagain.com.np/magento-solution-to-error-404-not-found-in-admin-login-page/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top