Pregunta

Recientemente hemos actualizado desde 1.10 a 1,13 y están teniendo algunos problemas con nuestra página de inicio. Todas las demás páginas cms están funcionando correctamente, pero la página principal está constantemente volviendo un cms 404. No importa que CMS página elegimos ser la página principal, siempre devuelve 404.

La vista de tienda está configurado correctamente, la página 'url' se establece en cms, y no puedo encontrar ninguna entrada en core_url_rewrite con un campo request_path vacía.

Todo funcionaba bien en nuestro entorno de desarrollo.

Como una solución déficit de parada hasta que encontremos una solución real, hemos creado la página 404 de Magento para cargar la página cms que se supone que se utilizará en la página real casa. Los usuarios no notan una diferencia, pero la página principal de nuestro sitio está todavía técnicamente lanzando un 404.

¿Alguna idea sobre lo que está pasando aquí?

Editar

El culpable fue un producto con una clave url vacía. Hasta ahora, ha habido algunos casos en nuestro flujo de trabajo de carga de producto en un producto conseguiría añadido a Magento de nuestro ERP antes de que tenga un nombre. La clave URL es generada en base al nombre del producto, por lo que estos productos tienen ninguna tecla url. En este 1.10, aparentemente, no era un problema. 1.13 Sin embargo, se trata de que, como si entramos en la raíz de documentos como la clave url. Desde producto redirecciones de URL sustituyen cms redirecciones, Magento estaba tratando de punto a este producto. Se regresaba 404 debido a que el producto se ha marcado como 'no es visible de forma individual'.

¿Fue útil?

Solución

No vas a salir de esto sin un poco de depuración. Lo siguiente se aplica a Magento CE, pero debe ser relevante para Magento EE. Además, este post resume una gran cantidad de material encontrado mi Magento Despacho serie . Si quieres realmente participar en alguna de abajo hacia arriba de depuración, empezar por ahí.

Para empezar, la mayoría de los problemas de Magento que veo se reducen a "Estaba muy seguro de que esto era una cosa X, pero en realidad fue Y". Incluso si está absolutamente seguro de algo en lo que digo para comprobar, asegurarse de que realmente se comprueba.

El enrutamiento para la página web de Magento es manejado por el objeto Mage_Core_Controller_Varien_Router_Standard. La primera parte clave es esta línea

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

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

Las miradas método _getDefaultPath en su almacén de configuración Magento para el valor de ajuste.

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

que es la configuración que corresponde a

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

Triple cheque que este valor se establece en la cadena

`cms`

y que su mesa core_config_data

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

no contiene valores Scoped inesperados.

Una vez hecho lo anterior, añadir un poco de depuración de código temporal a vistazo en el valor de $p después de esa llamada.

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

Debería ver algo como esto de salida

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

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

La razón por la que tiene dos elementos objeto de dumping / registra se se comparte el método match entre el router y el objeto de administrador del router estándar. Si el segundo elemento no es una matriz con un elemento cms, que es su problema. Averiguar lo que no está pasando, y usted estará en su manera de resolver el problema.

Si se asume que no es el problema, Magento ahora debe enviar al método indexAction en el archivo IndexController.php en el módulo Mage_Cms. Asegúrese de que este es el caso, mediante la adición de las dos líneas siguientes al inicio de 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');
    }
}

Debería ver Mage_Cms_IndexController::indexAction objeto de dumping a la ventana del navegador. Si esto no sucede, entonces hay algo acerca de su sistema que está impidiendo ruta estándar que se utilice - volver salto arriba en el método match y averiguar por qué $controller, $controllerClassName, $controllerInstance y variables $action no apunte al método indexAction en IndexController.php el archivo en el módulo Mage_Cms. (Si este es el caso, lo dice en los comentarios y voy a ofrecer una actualización de depuración scanrio para esto)

Asumiendo que se están dirigiendo al este archivo controlador y la acción correcta, quitar el

var_dump(__METHOD__);
exit;

y en lugar de añadir un nuevo var_dump

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

Magento le permite configurar el identificador de la página que se debe utilizar como página principal. El Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE debería se corresponde con la web/default/cms_home_page camino almacén de configuración, que se corresponde con el

System -> Configuration -> Web -> Default Pages -> CMS Home Page
sección

. Esto es donde le dirá qué página Magento CMS que desea utilizar como página de inicio. Debería ver algo como

string 'home' (length=4)

o

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

o etc. vuelca en su pantalla. Esta es la página principal identificador de CMS. Si está configurando un valor inesperado, intente ejecutar el siguiente

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

para comprobar si los valores de ámbito. Independientemente de lo que CMS Inicio ID de página es, la verificación de la existencia de la página con la siguiente instrucción SQL (suponiendo un valor de home).

select * from cms_page where identifier = 'home';

Si Magento no puede encontrar la página configurada en su sistema, se remitirá a la página 404. Se puede ver que con el código siguiente en indexAction

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

Si se vuelve a renderPage false, entonces estamos remitida al método defaultIndexAction que hace la página 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();
}    

Esto debería ser suficiente para encontrar el 90% de su "ninguna ruta a la página principal" problemas y apuntar en una dirección de depuración para el otro 10%.

Otros consejos

me encontré con este mismo problema con una clave url vacío para una categoría de inactivos. No pop hasta que probé indexación en EE 1.13.0.0 después de la actualización. Lo mismo pasa, 404 en la página principal.

Probablemente soy así simplificar el trabajo de detective de Alan, pero terminó justo a usar la nueva tabla enterprise_url_rewrite para una request_path vacía.

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

El TARGET_PATH juego me dio un indicio de la solicitud de que se secuestrando la página principal. Entonces, me dije fijo categoría y todo estaba bien.

This is a known bug from Magento - The recommend running the following:

DELETE FROM enterprise_url_rewrite WHERE request_path = '';

In addition there are number of new scripts in the shell directory (Please read the release notes)

Probably this problem here.. Check your imported group ids http://blog.chapagain.com.np/magento-solution-to-error-404-not-found-in-admin-login-page/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top