Rails redirect_to丢失了https协议并转到http

时间:2016-06-23 14:27:40

标签: ruby-on-rails ssl

在控制器中使用redirect_to example_path时,协议将更改为http。我希望协议保持与原始请求相同,例如如果我正在使用https,我希望被重定向到https://example_path ...如果我正在使用http,我希望被重定向到http://example_path ......

我知道我可以使用config.force_ssl = true,但我希望ssl是可选的。

3 个答案:

答案 0 :(得分:1)

redirect_to在其args哈希中获取协议密钥。你可以做到

redirect_to example_path, protocol: request.protocol

那应该让你排序。如果这不起作用,请告诉我。

答案 1 :(得分:1)

@ ruby​​_newbie的答案对我不起作用。 redirect_to String protocol忽略了only_path arg。此外,我使用代理进行SSL终止,因此Rail的协议可能与用户使用的协议不同。您可以使用protocol: '//',但我最终使用redirect_to controller: 'example', action: 'show', protocol: '//' ,如下所示:

location

答案 2 :(得分:0)

对我有用的是在我的nginx配置中添加一行。我使用nginx + unicorn,在端口3000中监听http,在端口3001中监听https。

完整的配置文件如下,将其放置在站点可用的位置,并用适当的内容替换[...]:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!")
.setContentIntent(pendingIntent)
.setWhen(0);