2012-01-10 185 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