2012-03-13 73 views
4

我正在運行Magento社區網站(版本1.5.1),並且遇到了「404」頁面的問題。如何登錄Magento「404」頁面

我們用戶登陸我們的網站直接鏈接,也是谷歌/ bing搜索結果。他們去的頁面可能不正確,因爲它們可能已經改變。 Magento使用MVC將請求路由到正確的控制器,但是當沒有控制器時,Magento顯示靜態CMS頁面(即「404」頁面)。問題是,這個頁面不允許我編寫自定義的PHP代碼就可以了,所以我不能登錄造成的404

的URL。如果我能找到在代碼中右鍵點之前顯示CMS 404頁面,然後我可以記錄URL並使用它來進行適當的URL重寫。

有人可以幫助我來這裏的代碼是最後的任何控制器上的放棄,並顯示自定義的CMS「404」頁?

回答

4

基本上,這是發生在Mage_Cms_IndexController::noRouteAction()。但是你也可以看看你的web服務器日誌裏有404返回代碼的條目(404是用相同的方法設置的)。

+0

謝謝您的回答。在Magento中導航是衆所周知的一種痛苦 - 這意味着它有一個很好的抽象體系結構,我猜。你的幫助是無價的。 – Enigmativity 2012-03-14 02:48:00

1

亞歷克斯在他的回答中出現了。我想我會根據他的回答發佈我寫的代碼來解決問題。

/** 
* 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); 
}