からに何かを追加する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
これで、ホームページにリダイレクトされます。これがリダイレクトのバグかどうかわかりませんか?
回答:
カートコントローラーを見るapp/code/core/Mage/Checkout/controllers/CartController.php
と、関数が見つかります_goBack
。これは、戻り値のURLが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;
}
探しているセクションは_getRefererUrl
、戻りURLをパラメーターとして設定せず、カートへのデフォルトのリダイレクトオプションを使用しない場合に発生する呼び出しです。
関数_getRefererUrl
内では、ベースURLが使用されているよりも内部的でない場合、参照URLが内部URLであるかどうかがチェックされます。
リファラーURLが外部であるか、チェックに問題があることをお勧めします。
Mage_Core_Controller_Varien_Action::_isUrlInternal
URLが内部かどうかをデバッグするために見てください。
問題は、ベースURLにポートがあるため、_isUrlInternalが失敗することでした。
david-mannersの回答に加えて、ポートなしでweb/unsecure/base_url
&web/secure/base_url
が正しく設定されていることにも問題がある可能性があります。
これにより、\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を参照して
くださいクリーンで適切なソリューションについては、
https://serverfault.com/questions/318151/how-to-set-php-server-port-var-to-80-behind-varnish