Как войти Magento "404" страницы - PullRequest
4 голосов
/ 13 марта 2012

У меня есть сайт сообщества Magento (в версии 1.5.1), и у меня проблема со страницами "404".

У нас есть пользователи, которые заходят на наш сайт по прямым ссылкам, а также из Google./ Bing результаты поиска.Страницы, на которые они переходят, могут быть неправильными, поскольку они могли измениться.Magento использует MVC для маршрутизации запросов к правильному контроллеру, но при отсутствии контроллера Magento отображает статическую страницу CMS (то есть страницу «404»).Проблема в том, что эта страница не позволяет мне писать собственный PHP-код, поэтому я не могу записать URL-адрес, вызвавший 404.

Если я могу найти нужную точку в коде перед отображениемзатем на странице CMS 404 я могу зарегистрировать URL-адрес и использовать его для соответствующей перезаписи URL.

Может ли кто-нибудь помочь мне узнать, где находится код, который в конце концов отказывает на любом контроллере и отображает пользовательский CMS "404"страница?

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

В основном это происходит в Mage_Cms_IndexController::noRouteAction().Но вы также можете просто просмотреть журнал вашего веб-сервера для записей с кодом возврата 404 (404 задается тем же методом).

1 голос
/ 14 марта 2012

Алекс был на месте со своим ответом.Я решил опубликовать код, который написал для решения проблемы, основываясь на его ответе.

/**
 * Render CMS 404 Not found page
 *
 * @param string $coreRoute
 */
public function noRouteAction($coreRoute = null)
{
    $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
    $this->getResponse()->setHeader('Status','404 File not found');

    /* JCS */
    $path = $this->getRequest()->getPathInfo();

    if (!startsWith($path, '/media/')) {
        if (!startsWith($path, '/images/')) {
            if (!startsWith($path, '/ebay/')) {
                if (!startsWith($path, '/app/')) {
                    Mage::log('JCS:noRouteAction:path:'.$path);
                }
            }
        }
    }

    $pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_NO_ROUTE_PAGE);
    if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
        $this->_forward('defaultNoRoute');
    }
}

Я также добавил функцию startsWith:

/* JCS */
function startsWith($haystack, $needle)
{
    $length = strlen($needle);
    return (substr($haystack, 0, $length) === $needle);
}
...