Como criar URL https para http

11

Eu estou querendo saber como o magento determina qual página deve ser segura e qual página deve ser insegura.

Pelo que entendi, o magento apenas torna a página de checkout e login tão segura por padrão e eu posso proteger outras páginas especificando-as no caminho de configuração frontend/secure_url/....através do config.xml do meu módulo

A configuração do lado do administrador parece estar correta. O SSL está ativado no front-end e no back-end. O back-end é totalmente sobre https. No frontend, a maioria das páginas funciona bem em http, incluindo a página inicial, e as páginas de checkout e login são redirecionadas para https, conforme o esperado.

Mas existem alguns outros URLs sendo redirecionados para https que eu esperava permanecer no http, incluindo o controlador / ação de um módulo personalizado.

Eu preciso de algumas dicas sobre como depurar isso? Existe alguma outra configuração que eu possa usar para impedir que eles sejam redirecionados?

Mridul Aggarwal
fonte
Você poderia dar alguns exemplos / código (por exemplo, a configuração XML do módulo personalizado)? Além disso, eu não falaria de "depuração" quando você tenta redirecionar https: // para http: //;)
simonthesorcerer

Respostas:

3

Existe uma função exatamente para isso, chamada shouldUrlBeSecurelocalizada em app/code/core/Mage/Core/Model/Config.phplinha 1477.

Aqui está a função 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 quais URLs devem ser seguros, você pode adicionar um simples Mage::log($secureUrls)dentro da ifinstrução. É assim que minha entrada de log era:

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/
)

Agora, para descobrir como Magento muda HTTPpara HTTPS eu acho que você provavelmente tem mergulhar no Zend Framework no libinterior lib/Zend/Http/*porque contém arquivos de maior interesse. Bem, de qualquer maneira espero que isso tenha ajudado. Boa sorte!

Oleg
fonte
3

Se, você quer usado para secure url para any other modules, então você precisa alguma mudança no config.xmlde que os módulos .. Primeiro de frontend usadas as tags

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

E, se você for para a URL do produto, mude $this->getUrl('productfaq/index/index', array('_secure'=>true));

Meu caminho de extensão \app\code\local\Amit\Productfaq\etc.

No config.xml precisa mudar abaixo

     <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
fonte