0

将 Magento 安装迁移到新的专用服务器时出现以下错误

我在克隆和迁移 Magento 方面非常有经验,但我不知道这里出了什么问题。

我已经检查了新服务器的兼容性,这很好..

当 uri 中有下划线时,通常会引发此错误。我尝试了不同的子域,但不断收到错误消息。我刚刚将同一个站点迁移到我的开发服务器,它工作正常 - 有什么想法吗?

Trace:
/home/shushush/public_html/shoponline/magento/lib/Zend/Uri.php(143): Zend_Uri_Http->__construct('http', '//www.shushusho...')
1 /home/shushush/public_html/shoponline/magento/app/code/core/Mage/Core/Model/Store.php(712): Zend_Uri::factory('http://www.shus...')
2 /home/shushush/public_html/shoponline/magento/app/code/core/Mage/Core/Controller/Varien/Front.php(313): Mage_Core_Model_Store->isCurrentlySecure()
3 /home/shushush/public_html/shoponline/magento/app/code/core/Mage/Core/Controller/Varien/Front.php(161): Mage_Core_Controller_Varien_Front->_checkBaseUrl(Object(Mage_Core_Controller_Request_Http))
4 /home/shushush/public_html/shoponline/magento/app/code/core/Mage/Core/Model/App.php(349): Mage_Core_Controller_Varien_Front->dispatch()
5 /home/shushush/public_html/shoponline/magento/app/Mage.php(640): Mage_Core_Model_App->run(Array)
6 /home/shushush/public_html/shoponline/magento/index.php(80): Mage::run('', 'store')
7 {main}
4

2 回答 2

6

问题是由于 '_' 造成的。它不会识别下划线。

于 2013-07-17T08:17:10.210 回答
1

查看您的调用堆栈,看来这是触发您看到的错误/异常的方法

Zend_Uri_Http->__construct

跳转到该文件的源代码,我猜(因为您没有包含错误文本)这是您看到的异常。

#File: lib/Zend/Uri/Http.php
protected function __construct($scheme, $schemeSpecific = '')
{
    //...
    if ($this->valid() === false) {
        #require_once 'Zend/Uri/Exception.php';
        throw new Zend_Uri_Exception('Invalid URI supplied');
    }
    //...
}

看一下valid方法的定义

public function valid()
{
    // Return true if and only if all parts of the URI have passed validation
    return $this->validateUsername()
       and $this->validatePassword()
       and $this->validateHost()
       and $this->validatePort()
       and $this->validatePath()
       and $this->validateQuery()
       and $this->validateFragment();
}

您可以看到 Zend/Magento 调用的 7 种方法来确定 URI 是否有效。其中之一是失败。我建议添加一些临时调试代码来确定哪个方法返回 false

public function valid()
{
    var_dump($this->validateUsername());
    var_dump($this->validatePassword());
    var_dump($this->validateHost());
    var_dump($this->validatePort());
    var_dump($this->validatePath());
    var_dump($this->validateQuery());
    var_dump($this->validateFragment());

    // Return true if and only if all parts of the URI have passed validation
    return $this->validateUsername()
       and $this->validatePassword()
       and $this->validateHost()
       and $this->validatePort()
       and $this->validatePath()
       and $this->validateQuery()
       and $this->validateFragment();
}

然后,一旦您知道这一点,您就可以查看返回 false 的方法的定义,并确定它在哪些字符上失败。

于 2012-11-14T18:30:24.747 回答