2012-09-20 14 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())) 

这让您根据您的当前协议的安全/不安全的产品网址。