5

即使我使用 HTTPS,Magento 的 getProductUrl() 似乎总是返回一个 HTTP URL。有什么方法可以自动切换到 HTTPS?(或让它返回相对协议 url)。

我会说这是一个相当“标准”的配置。

基本 URL 是http://example.com/

安全 URL 是https://example.com/

在前端使用安全 URL 是否

基本链接 URL 是 {{unsecure_base_url}}

我知道我可以将上面的内容更改为 {{secure_base_url}} 但是我不想强制从 HTTP 更改为 HTTPS,我只需要它保持相对。

4

4 回答 4

13

Magento 的主要好处是你可以用它做任何你想做的事情:) 所以,是的,你可以输出 HTTPS 产品 url 或相关的。但是,在选择解决方案之前,让我们考虑一下 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 协议的产品 URL。

4)如果你需要只在HTTP页面显示HTTP产品链接,而HTTPS产品链接只在HTTPS页面显示,那么你可以使用方法3),逻辑更复杂:在设置'_secure'参数之前检查当前页面的协议。

希望能帮助到你。

于 2012-09-24T09:29:34.123 回答
1

我只是用原始的方式来做,有时效果最好:

echo trim($_product->getProductUrl(),'http:')
于 2012-09-21T00:22:23.223 回答
0

反而

$product->getProductUrl()

尝试

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

这会根据您当前的协议为您提供一个安全/不安全的产品 URL。

于 2016-09-29T09:55:33.203 回答
-2

在 System | 中有一个低调但重要的选项。配置 | Web ~ 你必须说“在前端使用安全 url”——如果你将它设置为 yes,那么 https 加载的页面将使用 https 链接,

大多数情况下无需编写代码或提供额外配置

于 2014-12-23T12:14:16.200 回答