Cómo hacer una URL https a http

11

Me pregunto cómo magento determina qué página debe ser segura y qué página no debe ser segura.

Por lo que entiendo, magento solo hace que la página de pago e inicio de sesión sea segura de forma predeterminada y puedo hacer que otras páginas sean seguras al especificarlas en la ruta de configuración a frontend/secure_url/....través de config.xml de mi módulo

La configuración del lado del administrador parece estar bien. SSL está habilitado en frontend y backend. El backend está completamente sobre https. En la interfaz, la mayoría de las páginas funcionan bien en http, incluida la página de inicio, y las páginas de pago e inicio de sesión se redirigen a https como se esperaba.

Pero hay algunas otras URL que se redirigen a https que esperaba que permanecieran en http, incluido el controlador / acción de un módulo personalizado.

Necesito algunos consejos sobre cómo depurar esto? ¿Hay alguna otra configuración que pueda usar para evitar que se redirija?

Mridul Aggarwal
fuente
¿Podría dar algunos ejemplos / código (por ejemplo, la configuración XML del módulo personalizado)? Además, no hablaría de "depuración" cuando intente redirigir https: // a http: //;)
simonthesorcerer

Respuestas:

3

Hay una función solo para eso, llamada shouldUrlBeSecureubicada en app/code/core/Mage/Core/Model/Config.phplínea 1477.

Aquí está la función completa:

/**
 * Check whether given path should be secure according to configuration security requirements for URL
 * "Secure" should not be confused with https protocol, it is about web/secure/*_url settings usage only
 *
 * @param string $url
 * @return bool
 */
public function shouldUrlBeSecure($url)
{
    if (!Mage::getStoreConfigFlag(Mage_Core_Model_Store::XML_PATH_SECURE_IN_FRONTEND)) {
        return false;
    }

    if (!isset($this->_secureUrlCache[$url])) {
        $this->_secureUrlCache[$url] = false;
        $secureUrls = $this->getNode('frontend/secure_url');
        foreach ($secureUrls->children() as $match) {
            if (strpos($url, (string)$match) === 0) {
                $this->_secureUrlCache[$url] = true;
                break;
            }
        }
    }

    return $this->_secureUrlCache[$url];
}

Para ver qué URL deben ser seguras, puede agregar un simple Mage::log($secureUrls)dentro de la ifdeclaración. Así es como se veía mi entrada de registro:

2014-02-12T11:55:26+00:00 DEBUG (7): Mage_Core_Model_Config_Element Object
(
    [install] => /install/wizard/checkSecureHost
    [customer] => /customer/
    [sales] => /sales/
    [authorizenet_paygate] => /paygate/authorizenet_payment
    [checkout_onepage] => /checkout/onepage
    [checkout_multishipping] => /checkout/multishipping
    [paypal_express] => /paypal/express
    [paypal_standard] => /paypal/standard
    [paypal_express_callbackshippingoptions] => paypal/express/callbackshippingoptions
    [googlecheckout_redirect] => /googlecheckout/redirect/
    [googlecheckout_beacon] => /googlecheckout/api/beacon/
    [googlecheckout_api] => /googlecheckout/api/
    [review_customer] => /review/customer/
    [tag_customer] => /tag/customer/
    [wishlist] => /wishlist/
    [paypaluk_express] => /paypaluk/express
    [rss_catalog_review] => /rss/catalog/review
    [rss_order_new] => /rss/order/new
    [rss_catalog_notifystock] => /rss/catalog/notifystock
    [centinel] => /centinel/
    [newsletter_manage] => /newsletter/manage/
    [downloadable] => /downloadable/customer/
    [downloadable_download] => /downloadable/download/
    [ogone_api] => /ogone/api
    [persistent_onepage_register] => /persistent/index/saveMethod
    [checkout_cart] => /checkout/cart
    [storecredit_info] => /storecredit/info/
    [giftcard_customer] => /giftcard/customer/
    [enterprise_pbridge_pbridge] => /enterprise_pbridge/pbridge/
    [invitation] => /invitation/
)

Ahora que encontrar la manera de Magento cambia HTTPa HTTPS creo que lo más probable es que tenga sumergirse en el marco de Zend en el libinterior lib/Zend/Http/*, ya que contiene los archivos de mayor interés. Bueno, de todos modos espero que esto haya ayudado. ¡Buena suerte!

Oleg
fuente
3

Si, desea utilizar para secure url para any other modulesentonces necesita algún cambio en config.xmlde que los módulos .. En primer lugar para las etiquetas frontend utilizado

<secure_url>
            <productfaq>/productfaq</productfaq>
        </secure_url>

Y, si busca la URL de productfaq, cambie $this->getUrl('productfaq/index/index', array('_secure'=>true));

Mi camino de extensión \app\code\local\Amit\Productfaq\etc.

En config.xml necesita cambiar a continuación

     <frontend>
            <routers>
                <productfaq>
                    <use>standard</use>
                    <args>
                        <module>Amit_Productfaq</module>
                        <frontName>onestepcheckout</frontName>
                    </args>
                </productfaq>
            </routers>
            <layout>
                <updates>
                    <productfaq>
                        <file>productfaq.xml</file>
                    </productfaq>
                </updates>
            </layout>
        <!-- add secure url for extesnion, for that  
url productfaq automatically appnend https:  -->
             <secure_url>
                <productfaq>/productfaq</productfaq>
            </secure_url>
        </frontend>
Amit Bera
fuente