2012-09-20 38 views
5

即使當我在HTTPS,Magento的getProductUrl()似乎總是返回一個HTTP URL。我可以通過任何方式將此自動切換爲HTTPS? (或讓它返回相關的協議網址)。Magento的getProductUrl()總是返回HTTP

我會說這是一個相當「標準」配置。

基礎網址http://example.com/

安全網址是https://example.com/

使用安全網址的前端是沒有

基地鏈接網址{{unsecure_base_url}}

我知道我可以改變上面的{{secure_base_url}}但是我不想強制從HTTP到HTTPS的更改,我只需要它保持相對。

+0

問題缺乏細節:1)什麼是「即使我在使用HTTPS」 - 您是否通過「https://」鏈接輸入前端? 2)「Genereal \ Web \ Secure」部分的「Base Url」,「Base Link Url」和「前端使用安全網址」的配置是什麼? –

+0

更新了問題,謝謝@AndreyTserkus –

回答

11

Magento的主要好處是,你可以做你想做的事情:)所以任何東西,是的,你可以輸出HTTPS產品網址或相關網址。但是,在選擇解決方案之前,我們先考慮一下Magento作者的願景。

爲前端的HTTPS被設計成只像客戶帳戶,付款方式,結帳等沒有什麼比私人有關產品,這就必須要通過HTTPS以及觀看特定領域的工作。

默認的Magento不使用HTTPS甚至頁面,上面提到的。爲了打開HTTPS,必須將「在前端使用安全URL」選項設置爲「是」。如上所述,只有在包含一些私人數據的有限頁面中才會使用HTTPS。

所以最適合您的解決方案取決於實體店的具體情況,您正在開發。

1)如果你想在前端的所有頁面上使用HTTPS - 那麼最好的解決方案是將「https:// ...」放入「不安全」網頁URL配置的「基本URL」選項中。

2)如果你要打開的HTTPS只負責產品的鏈接,只對有限的頁面數量,那麼你可以爲了把有相對URL重寫頁面的模板。實際的代碼可以在任何你喜歡的方式來實現,即使是最簡單已經提出的方法是確定的:

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

3)如果你想從事HTTPS在前端的所有產品鏈接 - 那麼最好的辦法就是覆蓋Mage_Catalog_Module_Product_Url模型及更換方法getUrl() - 你需要把有

$routeParams['_secure'] = true; 

這將產生所有HTTPS協議中的產品網址。 4)如果只需要在HTTPS頁面上的HTTP頁面和HTTPS產品鏈接上顯示HTTP產品鏈接,那麼可以使用方法3)更復雜的邏輯:檢查當前頁面的協議,然後設置'_secure '參數。

希望它有幫助。

+0

感謝您的回答。我的方式產生一個相對的協議URL,例如。 //example.com/shoe.html,以便您始終保持相同的協議。 (需要一些ajax與fancybox的東西:) –

1

我只是做了它的原始的方式,有時效果最好:

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

這是一個低估但重要的選項在系統|配置| Web〜你必須說「在前端使用安全網址」 - 如果將其設置爲yes,那麼https加載的頁面將使用https鏈接,

無需編寫代碼或在大多數情況下提供額外配置

0

相反

$product->getProductUrl() 

嘗試

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

這讓您根據您的當前協議的安全/不安全的產品網址。