当我从添加的东西category给basket/cart它重定向我的basket/cart。
搜索后,我发现可以通过以下方式在管理系统中启用此功能
Configuration > Sales | Checkout > After Adding a Product Redirect to Shopping Cart
现在,它重定向到主页。我不知道这是重定向中的错误吗?
当我从添加的东西category给basket/cart它重定向我的basket/cart。
搜索后,我发现可以通过以下方式在管理系统中启用此功能
Configuration > Sales | Checkout > After Adding a Product Redirect to Shopping Cart
现在,它重定向到主页。我不知道这是重定向中的错误吗?
Answers:
如果您查看购物车控制器,app/code/core/Mage/Checkout/controllers/CartController.php您将找到该功能_goBack。这是Magento决定返回URL的地方。
protected function _goBack()
{
    $returnUrl = $this->getRequest()->getParam('return_url');
    if ($returnUrl) {
        if (!$this->_isUrlInternal($returnUrl)) {
            throw new Mage_Exception('External urls redirect to "' . $returnUrl . '" denied!');
        }
        $this->_getSession()->getMessages(true);
        $this->getResponse()->setRedirect($returnUrl);
    } elseif (!Mage::getStoreConfig('checkout/cart/redirect_to_cart')
        && !$this->getRequest()->getParam('in_cart')
        && $backUrl = $this->_getRefererUrl()
    ) {
        $this->getResponse()->setRedirect($backUrl);
    } else {
        if (($this->getRequest()->getActionName() == 'add') && !$this->getRequest()->getParam('in_cart')) {
            $this->_getSession()->setContinueShoppingUrl($this->_getRefererUrl());
        }
        $this->_redirect('checkout/cart');
    }
    return $this;
}您正在寻找的部分是_getRefererUrl当您未将返回网址设置为参数并且未使用默认的重定向到购物车选项时发生的调用。
在该函数_getRefererUrl内部,如果引荐来源网址不是内部网址,则将检查引荐来源网址是否是内部网址,而不是使用基本网址。
我建议您的引荐来源网址是外部的,或者检查有问题。
看看是否Mage_Core_Controller_Varien_Action::_isUrlInternal要调试内部url。
问题是_isUrlInternal由于在基本url中具有端口而失败
除了david-manners的回答外,您可能还会在没有端口的情况下正确设置web/unsecure/base_url&web/secure/base_url并遇到问题-但实际的应用程序虚拟主机(apache / nginx)监听的端口不是80/443,例如在清漆后面运行时。
这将导致\Mage_Core_Helper_Url::getCurrentUrl,例如用于添加base64编码的查询参数-通过_getRefererUrl将“非默认”端口作为url的一部分进行解码和使用。(例如http://www.domain.com:81/your-url.html)
结果Mage_Core_Controller_Varien_Action::_isUrlInternal返回false ...
有关更多参考,请参见
http://erikeng.se/post/magento-behind-varnish.html/server/318151/how-to-set-php-server-port-var-to-80-behind-varnish中介绍了一种干净而好的解决方案