Domanda

recentemente aggiornato 1,10-1,13 e stanno avendo alcuni problemi con la nostra home page. Tutte le altre pagine di CMS funzionano correttamente, ma la home page è sempre restituire un cms 404. Non importa quale CMS pagina abbiamo scelto di essere la home page, restituisce sempre 404.

La vista negozio è impostato correttamente, la home page 'url' è impostato su cms, e non riesco a trovare alcuna voce in core_url_rewrite con un campo request_path vuoto.

Tutto ha funzionato bene nel nostro ambiente dev.

Come una correzione gap fermata fino a trovare una soluzione reale, abbiamo 404 set di pagine di Magento per caricare la pagina cms che dovrebbe essere utilizzato in home page vera e propria. Gli utenti non notare una differenza, ma la home page del nostro sito è ancora tecnicamente gettando un 404.

Ogni pensiero su quello che sta succedendo qui?

Modifica

Il colpevole era un prodotto con una chiave URL vuoto. Fino ad ora, ci sono stati alcuni casi nel nostro flusso di lavoro caricati prodotto in cui un prodotto otterrebbe aggiunto a Magento dal nostro ERP prima che abbia un nome. La chiave URL viene generata in base al nome del prodotto, in modo che questi prodotti non hanno alcuna chiave url. In 1.10 questo a quanto pare non era un problema. 1.13 tuttavia, considera che come se siamo entrati la radice del documento come la chiave URL. Dal URL del prodotto redirect sostituiscono cms redirect, Magento stava cercando di punto a questo prodotto. Si stava tornando 404 in quanto il prodotto è stato contrassegnato come 'non visibile individuale'.

È stato utile?

Soluzione

Non hai intenzione di uscire da questo senza un po 'di debug. Quanto segue si applica a Magento CE, ma dovrebbe essere rilevante per Magento EE. Inoltre, questo post riassume molte trovato materiale in mia Magento spedizione serie . Se si desidera davvero impegnarsi in qualche basso verso l'alto il debug, cominciare da lì.

Per iniziare, la maggior parte dei problemi di Magento che vedo si riducono a "ero davvero sicuro che questo era una cosa X, ma in realtà è stato Y". Anche se siete assolutamente sicuri di qualcosa che ti dico di controllare, assicurarsi che effettivamente controllare.

Il percorso per la home page di Magento è gestita dall'oggetto Mage_Core_Controller_Varien_Router_Standard. La prima parte chiave è questa linea

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

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

Il metodo _getDefaultPath guarda il tuo Magento negozio di configurazione per il valore impostato.

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

che è la configurazione che corrisponde a

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

controllo Tripple che questo valore è impostato alla stringa

`cms`

e che la tabella core_config_data

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

non contiene alcun valore di ambito inaspettati.

Una volta fatto ciò, aggiungere un po 'di codice di debug temporaneo per sbirciatina al valore della $p dopo quella chiamata.

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

Si dovrebbe vedere qualcosa di simile uscita

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

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

Il motivo di avere due elementi oggetto di dumping / registrato è il metodo match è condivisa tra il router admin e l'oggetto router standard. Se il secondo elemento non è un array di un elemento con cms, che è il tuo problema. Capire cosa non sta accadendo, e sarete sulla strada giusta per risolvere il problema.

Supponendo che non è il problema, Magento dovrebbe ora inviare al metodo indexAction nel file IndexController.php nel modulo Mage_Cms. Assicurare questo caso aggiungendo le seguenti due righe dell'inizio 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');
    }
}

Si dovrebbe vedere Mage_Cms_IndexController::indexAction scaricato alla finestra del browser. Se questo non accade, allora c'è qualcosa sul vostro sistema che impedisce l'instradamento di serie venga utilizzato - salto indietro fino al metodo match e capire perché $controller, $controllerClassName, $controllerInstance, e le variabili $action non puntare al metodo indexAction in il file IndexController.php nel modulo Mage_Cms. (Se questo è il caso, diciamo così nei commenti e sarò fornire un aggiornamento di debug scanrio per questo)

Supponendo che si sta di essere indirizzati a questo file di controllo e l'azione in modo corretto, rimuovere il

var_dump(__METHOD__);
exit;

e invece aggiungere un nuovo var_dump

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

Magento permette di configurare l'identificatore della pagina che dovrebbe essere usato come home page. Il Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE dovrebbe corrisponde con il percorso web/default/cms_home_page negozio config, che corrisponde al

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

. Questo è dove si dice Magento quale pagina CMS che si desidera utilizzare come pagina iniziale. Si dovrebbe vedere qualcosa di simile

string 'home' (length=4)

o

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

o ecc dumping per il vostro schermo. Questa è la home page identificatore CMS. Se si sta impostando un valore imprevisto, provare a eseguire la seguente

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

per verificare la presenza di valori con ambito. Indipendentemente da quello che CMS pagina ID è, verificare l'esistenza della pagina con la seguente istruzione SQL (assumendo un valore di home).

select * from cms_page where identifier = 'home';

Se Magento non riesce a trovare la pagina configurata nel vostro sistema, la inoltra alla pagina 404. Si può vedere che con il seguente codice nel indexAction

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

Se i rendimenti renderPage false, allora stiamo inoltrato al metodo defaultIndexAction che rende la pagina 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();
}    

Questo dovrebbe essere sufficiente per trovare il 90% del vostro "no route to homepage" problemi, e si punta in una direzione di debug per l'altro 10%.

Altri suggerimenti

mi sono imbattuto in questo stesso problema con una chiave URL vuoto per una categoria inattiva. Non ha pop-up fino a quando ho provato reindexing in EE 1.13.0.0 dopo l'aggiornamento. Lo stesso affare, 404 sulla home page.

Probabilmente sono ben banalizzando lavoro investigativo di Alan, ma ho finito per interrogare la nuova tabella enterprise_url_rewrite per request_path vuota.

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

Il percorso_destinazione corrispondente mi risparmiandoci per la richiesta che è stata dirottamento home page. Poi, ho detto fisso categoria e tutto andava bene.

Questo è un bug noto da Magento - Il consiglio eseguendo il seguente:

DELETE FROM WHERE enterprise_url_rewrite request_path = '';

In aggiunta ci sono il numero di nuovi script nella directory guscio (Si prega di leggere le note di rilascio)

Probabilmente questo problema qui .. Vedi gli ID gruppo importato http: // blog.chapagain.com.np/magento-solution-to-error-404-not-found-in-admin-login-page/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top