2012-09-20 7 views
5

Selbst wenn ich auf HTTPS bin, scheint Magento getProductUrl() immer eine HTTP URL zurückzugeben. Irgendwelche Möglichkeiten, wie ich diese automatische Umstellung auf HTTPS machen kann? (oder lassen Sie die relative Protokoll-URL zurückgeben).Magento getProductUrl() gibt immer HTTP zurück

Ich würde sagen, es ist eine eher "Standard" -Konfiguration.

Basis-URL ist http://example.com/

Sichere URL https://example.com/

Mit Secure-URLs in Frontend ist, keine

Base-Link URL ist {{unsecure_base_url}}

Ich weiß, ich könnte sich ändern das obige zu {{secure_base_url}} aber ich möchte keine Änderung von HTTP zu HTTPS erzwingen, ich brauche es nur, um relativ zu bleiben.

+0

Die Frage fehlt Details: 1) Was ist "auch wenn ich auf HTTPS bin" - haben Sie Frontend über "https: //" Link eingegeben? 2) Was ist die Konfiguration für "Base URL", "Base Link URL" und "Benutze Secure URLs im Frontend" im Abschnitt "Generelle \ Web \ Secure"? –

+0

Aktualisiert die Frage, danke @AndreyTserkus –

Antwort

11

Der Vorteil Haupt Magento, ist, dass Sie alles tun können Sie damit also :) wollen, ja, können Sie die Ausgabe HTTPS Produkt URLs oder relative. Bevor wir uns jedoch für eine Lösung entscheiden, betrachten wir die Vision der Magento-Autoren.

Das HTTPS für das Frontend wurde entwickelt, um nur für bestimmte Bereiche wie Kundenkonto, Zahlungsmethoden, Checkout, usw. zu funktionieren. Es gibt nichts so Privates an Produkten, was es notwendig macht, über HTTPS betrachtet zu werden.

Standardmäßig verwendet Magento HTTPS auch für die oben genannten Seiten nicht. Um HTTPS einzuschalten, muss die Option "Sichere URLs im Frontend verwenden" auf "Ja" gesetzt sein. Was, wie beschrieben, HTTPS nur in begrenzten Mengen von Seiten, die einige private Daten enthalten, aktiviert.

Also die beste Lösung für Sie hängt von Besonderheiten des Geschäfts, die Sie entwickeln.

1) Wenn Sie HTTPS für alle Seiten im Frontend aktivieren möchten, dann ist die beste Lösung, "https: // ..." in die Option "Basis-URL" für die "Unsichere" Web-URL-Konfiguration zu setzen.

2) Wenn Sie HTTPS nur für Produktlinks und nur für eine begrenzte Anzahl von Seiten aktivieren möchten, können Sie Vorlagen dieser Seiten überschreiben, um dort relative URLs zu setzen. Der eigentliche Code kann die einfachste bereits vorgeschlagen, wie Sie möchten, auch in irgendeiner Art und Weise implementiert werden, ist ok:

echo trim($_product->getProductUrl(),'http:') 

3) Wenn Sie möchten, für alle Produkt Links am Frontend HTTPS engagieren - dann der beste Weg ist, um außer Kraft setzt Mage_Catalog_Module_Product_Url Modell und Änderungsverfahren getUrl() - Dies wird produziert alle Produkte Urls mit HTTPS-Protokoll Sie müssen dort

$routeParams['_secure'] = true; 

setzen.

4) Wenn HTTP-Produktlinks nur auf HTTP-Seiten und HTTPS-Produktlinks nur auf HTTPS-Seiten angezeigt werden sollen, können Sie Methode 3) mit einer ausgefeilteren Logik verwenden: Überprüfen Sie das Protokoll der aktuellen Seite, bevor Sie _secure setzen 'Parameter.

Hoffe, es hilft.

+0

Danke für Ihre Antwort. Mein Weg erzeugt eine relative Protokoll-URL, z. //example.com/shoe.html, damit Sie immer auf demselben Protokoll bleiben. (Wurde für einige Ajax-Sachen mit fancybox benötigt :) –

1

ich tat es einfach die primitive Art und Weise, manchmal funktioniert es am besten:

echo trim($_product->getProductUrl(),'http:') 
-2

Es ist eine untertriebene, aber wichtige Option in System | Konfiguration | Web ~, wo Sie sagen müssen "sichere URL im Frontend verwenden" - wenn Sie dies auf Ja setzen, wird eine von https geladene Seite https Links verwenden,

keine Notwendigkeit, Code schreiben oder zusätzliche Konfiguration in den meisten Fällen

0

Statt

$product->getProductUrl() 

$product->getUrlModel()->getUrl($product, array('_secure'=>(bool)Mage::app()->getStore()->isCurrentlySecure())) 

Das gibt Ihnen ein sicheres/ungesicherten Produkt url Versuchen Sie, auf Ihrem aktuellen Protokoll basiert.

Verwandte Themen