Comment créer une URL https vers http

11

Je me demande comment magento détermine quelle page doit être sécurisée et quelle page doit être non sécurisée.

D'après ce que je comprends, magento ne rend la page de paiement et de connexion sécurisée que par défaut et je peux sécuriser d'autres pages en les spécifiant sous le chemin de configuration frontend/secure_url/....via config.xml de mon module

La configuration côté administrateur semble correcte. SSL est activé à la fois en frontend et en backend. Le backend est entièrement sur https. Dans le frontend, la plupart des pages fonctionnent correctement sous http, y compris la page d'accueil, et les pages de paiement et de connexion sont redirigées vers https comme prévu.

Mais il y a quelques autres URL redirigées vers https que je m'attendais à rester sur http, y compris le contrôleur / l'action d'un module personnalisé.

J'ai besoin de quelques conseils sur la façon de déboguer cela? Existe-t-il une autre configuration que je peux utiliser pour empêcher leur redirection?

Mridul Aggarwal
la source
Pourriez-vous donner quelques exemples / code (par exemple, la configuration XML du module personnalisé)? De plus, je ne parlerais pas de "débogage" lorsque vous essayez de rediriger https: // vers http: //;)
simonthesorcerer

Réponses:

3

Il y a une fonction juste pour cela, appelée shouldUrlBeSecuresituée en app/code/core/Mage/Core/Model/Config.phpligne 1477.

Voici la fonction complète:

/**
 * 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];
}

Pour voir quelles URL doivent être sécurisées, vous pouvez ajouter un simple Mage::log($secureUrls)à l'intérieur de l' ifinstruction. Voici à quoi ressemblait mon entrée de journal:

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

Maintenant, pour comprendre comment Magento passe HTTPà HTTPS Je pense que vous auriez probablement plongé dans le framework Zend à l' libintérieur, lib/Zend/Http/*car il contient des fichiers les plus intéressants. Eh bien, j'espère que cela a aidé. Bonne chance!

Oleg
la source
3

Si vous voulez utiliser pour secure url pour any other modulesvous devez un certain changement config.xmlde modules que .. Tout d' abord pour les balises utilisées frontend

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

Et, si vous utilisez l'URL productfaq, changez $this->getUrl('productfaq/index/index', array('_secure'=>true));

Mon chemin d'extension \app\code\local\Amit\Productfaq\etc.

Dans config.xml besoin de changer ci-dessous

     <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
la source