2011-03-22 150 views

回答

4

使用Heroku的插件自定义域:

heroku addons:add custom_domains:basic 
heroku domains:add www.myapp.com 
heroku domains:add myapp.com 

此外,你必须采取一些配置步骤,在您的域名提供商的管理界面。您需要一个CNAME到proxy.heroku.com和三个A-RECORDs到Heroku IP。你可以在Heroku Docs中找到它。

编辑以回应下面的另一个答案。你可以在你的routes.rb重定向到myapp.com www.myapp.com:

constraints(:host => /^communityguides.eu/) do 
    root :to => redirect("http://www.communityguides.eu") 
    match '/*path', :to => redirect {|params| "http://www.communityguides.eu/#{params[:path]}"} 
    end 
1

首先,如果您不希望您的myapp.heroku.com被索引,只需在您的标题中添加机器人元标记并赋予“nofollow”值。

和重定向添加另一meta标签刷新:

<meta http-equiv="refresh" content="2;url=http://www.heroku.com/"> 

含量值是以秒,上面的例子就直接在2秒内visiotrs到您的主页。

希望它有助于

2

第一个答案去一部分的方式来解决这个问题,但引入了一个新的问题。

如果您添加www.myapp.com和myapp.com,您需要将其中的一个重定向到您的应用程序中的其他应用程序 - 因此,如果您选择www.myapp.com作为您的主要应用程序,检查请求的URL是否为不是 www.myapp.com并将请求重定向到www.myapp.com - 然后这将覆盖正确转向myapp.com和myapp.heroku.com的重定向请求。 Heroku在他们的文档here上有一个例子。

此外,您需要摆脱谷歌已经在Heroku域上编入索引的内容。你需要使用Google WebMaster tools改变域www.myapp.com - 这是一个相对简单的过程,一旦你登录到网站管理员工具

+0

使用Google网站管理员工具将域名更改为其他域名对于子域名不起作用。至少我没有得到它的工作。有没有可能对此做点什么? – Cristian 2011-12-27 15:28:28

5

根据Heroku docs用于自定义域,你可以做到这一点,像这样:

class ApplicationController 
    before_filter :ensure_domain 

    APP_DOMAIN = 'myapp.mydomain.com' 

    def ensure_domain 
    if request.env['HTTP_HOST'] != APP_DOMAIN 
     # HTTP 301 is a "permanent" redirect 
     redirect_to "http://#{APP_DOMAIN}", :status => 301 
    end 
    end 
end 

我使用这种方法,它工作正常。请注意,由于重定向返回301 http状态(永久性重定向),您的网站不会因重复内容而受到处罚。

301状态是Markus解决方案中唯一缺失的一点,但我认为这是一个重要的问题,如果你关心的是SEO。

编辑:一些不在文档上的东西,我忘了提及 - 你应该排除你不希望应用重定向的环境。您可以在if声明更改为类似:

if request.env['HTTP_HOST'] != APP_DOMAIN && ENV["RAILS_ENV"] != 'development' 
0

使用hide_heroku宝石,它使用X-Robots-Tag中的HTTP头,以防止搜索引擎索引什么* .herokuapp.com