Вопрос

Недавно мы обновили с 1,10 до 1,13 и имели некоторые проблемы с нашей домашней страницей. Все остальные страницы CMS функционируют должным образом, но домашняя страница последовательно возвращает CMS 404. Не имеет значения, какую страницу CMS мы предпочитаем быть домашней страницей, она всегда возвращает 404.

Просмотр магазина правильно установлен, URL -адрес HomePage «URL» установлен на CMS, и я не могу найти никаких записей в CORE_URL_REWRITE с пустым полем QUERSE_PATH.

Все работало нормально в нашей среде разработчика.

В качестве исправления остановки, пока мы не найдем реальное решение, у нас будет установлен 404 страница Magento для загрузки страницы CMS, которая должна использоваться на реальной домашней странице. Пользователи не замечают разницы, но домашняя страница нашего сайта все еще технически бросает 404.

Есть мысли о том, что здесь происходит?

РЕДАКТИРОВАТЬ

Виновником был продукт с пустым ключом URL. До сих пор в нашем рабочем процессе загрузки продукта были некоторые случаи, где продукт будет добавлен в Magento из нашего ERP, прежде чем он будет иметь имя. Ключ URL генерируется на основе названия продукта, поэтому эти продукты не имеют ключа URL. В 1.10 это, по -видимому, не было проблемой. 1.13 Однако относится к тому, что мы ввели корень документа в качестве ключа URL. Поскольку перенаправление URL -адреса продукта заменяет перенаправления CMS, Magento пытался указать на этот продукт. Он возвращался 404, потому что продукт был помечен как «не виден индивидуально».

Это было полезно?

Решение

Вы не собираетесь выйти из этого без небольшой отладки. Следующее относится к Magento CE, но должно быть актуально для Magento EE. Кроме того, этот пост суммирует много материалов, найденных в моя серия Magento Dispatch. Анкет Если ты хочешь В самом деле Занимайтесь в некоторой отладке внизу, начните там.

Для начала, большинство проблем с магенто, которые я вижу, сводится к «Я был действительно уверен, что это было X, но на самом деле это было Y». Даже если вы абсолютно уверены в чем -то, что я говорю вам проверить, убедитесь, что вы действительно проверяете это.

Маршрутизация домашней страницы Magento обрабатывается Mage_Core_Controller_Varien_Router_Standard объект. Первая ключевая часть - эта линия

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

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

А _getDefaultPath Метод смотрит на вашу конфигурацию Magento Store для установленного значения.

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

которая является конфигурацией, которая соответствует

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

Проверьте, что это значение установлено на строку

`cms`

И что ты core_config_data стол

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

не содержит никаких неожиданных значений обречения.

После того, как вы сделаете выше, добавьте немного временного кода отладки, чтобы заглянуть на значение $p После этого звонка.

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

Вы должны увидеть вывод чего -то подобного

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

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

Причина, по которой у вас есть два элемента, которые сбрасывают/зарегистрированы, - это match Метод используется между маршрутизатором администратора и стандартным объектом маршрутизатора. Если второй элемент не является массивом одного элемента с cms, это твоя проблема. Выясните, чего этого не происходит, и вы будете на пути к решению проблемы.

Предполагая, что это не проблема, Magento теперь должен отправить в indexAction Метод в IndexController.php файл в Mage_Cms модуль. Убедитесь, что это так, добавив следующие две строки в начало 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');
    }
}

Тебе следует увидеть Mage_Cms_IndexController::indexAction брошен в окно браузера. Если этого не произойдет, то в вашей системе есть что match метод и выяснить, почему $controller, $controllerClassName, $controllerInstance, а также $action переменные не указывают на indexAction Метод в IndexController.php файл в Mage_Cms модуль. (Если это так, скажем, в комментариях, и я предоставлю обновление отладка Scanrio для этого)

Предполагая, что вы правильно направляете в этот файл контроллера, удалите

var_dump(__METHOD__);
exit;

и вместо этого добавьте новый var_dump

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

Magento позволяет настроить идентификатор страницы, которую следует использовать в качестве домашней страницы. А Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE должен соответствовать пути конфигурации хранилища web/default/cms_home_page, что соответствует

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

раздел. Здесь вы говорите Magento, какую страницу CMS вы хотите использовать в качестве домашней страницы. Вы должны увидеть что -то вроде

string 'home' (length=4)

или же

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

или и т. д. брошен на экран. Это идентификатор домашней страницы CMS. Если вы устанавливаете неожиданное значение, попробуйте запустить следующее

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

Чтобы проверить наличие значений. Независимо от того, что вы CMS -идентификатор домашней страницы, проверьте существование страницы со следующим оператором SQL (при условии значения home).

select * from cms_page where identifier = 'home';

Если Magento не сможет найти настроенную страницу в вашей системе, она переназначит на страницу 404. Вы можете увидеть это со следующим кодом в indexAction

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

Если renderPage возврат false, затем мы пересылаем в defaultIndexAction Метод, который отдает 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();
}    

Этого должно быть достаточно, чтобы найти 90% ваших проблем «без маршрута на домашнюю страницу», и указывать вам в направлении отладки для других 10%.

Другие советы

Я столкнулся с этой же проблемой с пустым ключом URL для неактивной категории. Он не появлялся, пока я не проверил переоценку в EE 1.13.0.0 после обновления. Та же сделка, 404 на домашней странице.

Я, наверное, упрощаю детективную работу Алана, но в итоге я просто запросил новую таблицу Enterprise_url_rewrite для пустой request_path.

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

Соответствующий target_path подчеркнул меня по запросу, которая угонала домашней страницей. Затем я исправил указанную категорию, и все было хорошо.

Это известная ошибка из Magento - рекомендуется запустить следующее:

Удалить из Enterprise_url_rewrite, где request_path = '';

Кроме того, в каталоге Shell есть количество новых сценариев (пожалуйста, прочитайте заметки о выпуске)

Наверное, эта проблема здесь .. Проверьте свои импортированные идентификаторы группыhttp://blog.chapagain.com.np/magento-solution-to-error-404-not-found-in-admin-login-page/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top