【问题标题】:Heroku 301 RedirectHeroku 301 重定向
【发布时间】:2012-02-06 19:33:26
【问题描述】:

如何让http://domain.com 301 重定向到http://www.domain.com?我习惯使用 .htaccess 来 ModRewrite 它,但我知道我不能在 Heroku 上这样做。

.htaccess 示例:

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

我的文件结构:

- /public
--- /style
--- index.html
- config.ru

我只是提供单个页面,我的 config.ru 包含以下内容:

use Rack::Static,
:urls => ["/style"],
:root => "public"

run lambda { |env|
[
200,
{
'Content-Type' => 'text/html',
'Cache-Control' => 'public, max-age=86400'
},
File.open('public/index.html', File::RDONLY)
]
} 

【问题讨论】:

  • 这里没有一个答案对我有用,我很久以前就放弃了。
  • 我也有同样的问题……还是没有解决办法?

标签: ruby-on-rails ruby redirect heroku rack


【解决方案1】:

您必须添加一个新的免费Custom Domain

【讨论】:

  • 我有两个www。和 http:// 设置,两者都有效,但这不是我要问的。如果你去domain.com,我想让它加载 www.domain.com
【解决方案2】:

使用 rack_rewrite (gem 'rack-rewrite' in your Gemfile) 并在你的初始化器目录中创建一个 rack_rewrite.rb;

YourAppName::Application.config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
  r301 %r{.*}, 'http://www.yourdomainname.com$&', :if => Proc.new {|rack_env|
    rack_env['SERVER_NAME'] != 'www.yourdomainname.com'
  }
end if Rails.env == 'production'

这表示,如果请求的服务器名不是 www.yourdomainname.com,则将其重定向到 www.yourdomainname.com

【讨论】:

  • 好的,我这样做了......但它似乎没有效果。我添加了 /config/initializers/,然后使用上面的代码创建了 rack_rewrite.rb(显然更改了我的域名),Heroku 检测到并安装了 rack-rewrite gem。但是......当我加载 domain.com 时没有任何反应(即它只是加载,不会重写为 www)。
  • 奇怪 - 我直接从生产应用程序中提取它。啊,我的是一个 Rails 3.1 应用程序 - 看看github.com/jtrupiano/rack-rewrite的说明
  • 考虑到我在主帖中的文件结构,我认为我的机架应用程序不知道 /config/initializers 是什么?
  • 是的,我认为这是一个 Rails 应用程序(我的错),我最后一条评论中的链接有关于机架方法的说明。
  • 好吧,我按照链接中的建议将重写部分添加到了我的 config.ru 的底部,现在应用程序将无法启动。 pastebin.com/ZLCLDCct
猜你喜欢
  • 1970-01-01
  • 2020-03-28
  • 2013-08-30
  • 2010-09-26
  • 2013-01-07
  • 2018-03-06
  • 2010-11-05
  • 2011-11-17
  • 2010-12-16
相关资源
最近更新 更多