今天有個朋友說安裝了Magento之後,無法登陸,檢查了一遍設置,都沒問題,最後想了一遍,決定從程序入手來排查。
先說一下錯誤提示:
|
Exception
printing is disabled by default for security reasons. Error
log record number: XXXXXXXXXXXXXXX |
這是什麼錯誤呢?這個提示只會給人一頭霧水。先把Magento的錯誤提示打開吧。
找到:
|
/errors/local .xml.sample |
把這個文件重命名爲:local.xml
然後在網站根目錄下建立一個文件目錄 tmp ,接着找到
|
. /lib/Zend/Cache/Backend/File .php |
查找代碼:
|
|
修改爲:
protected $_options = array ( 'cache_dir' => 'tmp/' , |
保存文件,然後刷新網站首頁,錯誤就顯示出來了:
Illegal
scheme supplied, only alphanumeric characters are permitted Trace: #0
/home/artsandc/public_html/app/code/core/Mage/Core/Model/Store.php(712): Zend_Uri::factory(’{{base_url}}’) #1
/home/artsandc/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(313): Mage_Core_Model_Store->isCurrentlySecure() #2
/home/artsandc/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(161): Mage_Core_Controller_Varien_Front->_checkBaseUrl(Object(Mage_Core_Controller_Request_Http)) #3
/home/artsandc/public_html/app/code/core/Mage/Core/Model/App.php(349): Mage_Core_Controller_Varien_Front->dispatch() #4
/home/artsandc/public_html/app/Mage.php(640): Mage_Core_Model_App->run(Array) #5
/home/artsandc/public_html/index.php(80): Mage::run(’’, ‘store’) #6
{main} |
這個錯誤根據社區的討論,好像是1.6.0之後的版本出現的。具體可以參考社區論壇的討論貼:
http://www.magentocommerce.com/boards/viewthread/263751/
主要產生的原因:
問題主要出在:{{base_url}} 這個參數上,如果填入的域名是類似localhost之類域名,中間沒有用點號分隔開的話,產生錯誤的機會極大。而產生錯誤的文件爲 /app/code/core/Mage/Core/Model/Store.php
在 1.6.0.0的版本中, $secureBaseUrl是一個空值,但是在 1.6.1.0 的版本中則爲數據庫中的一個值。如果數據庫中你有設置‘{{base_url}}’,那麼$secureBaseUrl 就會被賦予 ‘{{base_url}}’. 而這個值恰恰會導致函數:
Zend_Uri::factory( $secureBaseUrl ); |
產生錯誤,然後導致中斷退出。
以下是兩種解決方法:
1、Dan Jones 提供的解決方法:
dan jones寫了一個擴展補丁包,可以下載到網站根目錄下,解壓即可,下載地址:
http://www.danneh.org/files/24
這個方法本機測試無效。
2、Jefferson Luís 提供的解決方法
打開:
./app/code/core/Mage/Core/Model/Store.php
找到712行:
$uri =
Zend_Uri::factory( $secureBaseUrl ); $port = $uri ->getPort(); |
在這行之前,插入以下代碼:
//
this solution is offer by 7ENET.COM TechTeam if (false
!== strpos ( $secureBaseUrl , '{{base_url}}' ))
{ $secureBaseUrl =
Mage::getConfig()->substDistroServerVars( '{{base_url}}' ); } //end
of custom code. |
這個方法本機測試有效,加入之後,刷新首頁,一起就都正常了。