Die Homepage ergibt 404 nach dem Upgrade
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.
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/