2012-01-10 184 views
3

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

例子:

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) 
] 
} 
+0

没有一个答案在这里为我工作,我早就放弃了这个。 – David 2012-10-29 16:59:07

+0

我有完全相同的问题...仍然没有解决方案? – dinkelk 2013-01-08 21:33:17

回答

0

你必须新增一个免费的Custom Domain

+0

我有两个http:// www。和http:// setup,都可以工作,但这不是我要求的。我想加载www.domain.com如果你去http://domain.com – David 2012-01-10 11:28:32

3

在你的Gemfile中使用rack_rewrite(gem'rack-rewrite')并在你的initializers目录中创建一个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

+0

好吧,我这样做...但它似乎没有效果。 我添加了/ config/initializers /,然后用上面的代码创建了rack_rewrite.rb(显然改变了我的域名),并且Heroku检测到并安装了rack-rewrite gem。但是......当我加载domain.com时,没有任何反应(即它只是加载,不会重写为www)。 – David 2012-01-10 21:22:57

+0

奇怪 - 我直接从生产应用程序中解除它。啊,我的是一个Rails 3.1应用程序 - 看看https://github.com/jtrupiano/rack-rewrite – 2012-01-10 21:26:47

+0

的说明我在想我的机架应用程序不知道什么/ config/initializers是考虑我的文件结构在我的主要职位? – David 2012-01-10 21:29:51