Se você olhar no controlador do carrinho app/code/core/Mage/Checkout/controllers/CartController.php
, encontrará a função _goBack
. É aqui que o URL de retorno é decidido pelo Magento.
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;
}
A seção que você está procurando é a chamada para _getRefererUrl
isso acontece quando você não está definindo o URL de retorno como parâmetro e não está usando a opção padrão de redirecionamento para carrinho.
Dentro da função, _getRefererUrl
o URL do referenciador é verificado para ver se é um URL interno, quando não é interno do que o URL base é usado.
Sugiro que seu URL de referência seja externo ou que haja algo errado com a verificação.
Dê uma olhada Mage_Core_Controller_Varien_Action::_isUrlInternal
para depurar se o URL é interno ou não.
O problema era que _isUrlInternal estava falhando por ter a porta na URL base