1

我认为这并不是一个真正困难的问题,但我使用了这么多不同的解决方案,并不真正知道什么是最好的。

我正在使用 Ruby on Rails 并将我的应用程序放在 Heroku 上,我想 301 将我的裸域 (@) 上的所有内容重定向到我的 www 域。例如

http://domain.com --> http://www.domain.com http://domain.com/subpage --> http://www.domain.com/subpage

现在我正在用我的 DNS 处理这个问题,首先删除 @ 和 www 条目。然后我将整个网站的重定向设置为http://www.domain.com(它为 @ 和 www 重新创建 DNS 条目)。最后,我将我的 www DNS-entry 更改为 CNAME 和 heroku-app 的名称 (http://myapp.herokuapp.com)。

这似乎将http://domain.com/subpage转发到http://www.domain.com(没有子页面)。

我现在正在寻找的是以简单/优雅的方式处理此问题的正确/推荐方法。

域名系统?路线?.ht 访问?(如果是这样,我如何在 RubyOnRails 中更改 .htaccess)

提前致谢!

4

4 回答 4

1

这些 问题可能与您的问题有关,也许看看那些。似乎(根据我的阅读),heroku 不允许访问 .htaccess 之类的东西或任何东西,所以看起来 Rack 中间件是最好的选择。

于 2013-01-25T17:57:09.050 回答
1

您的域名在哪里注册?如果使用 GoDaddy,他们会提供一项服务来为您处理 301 重定向,但这需要您注册他们的托管计划之一。成本最低(每月约 5 美元)。不是免费的,而是无痛的,不需要编码等。

于 2013-01-25T18:10:39.733 回答
1

(注意:没有尝试过这个,但它应该可以工作)

有人可能会争辩说,最好的方法是使用 DNS 或您的网络服务器功能来做到这一点。但是,如果需要,可以使用 rails 来完成。

总而言之,它的优点是您可以轻松地在过程中保留任何参数/路径,正如您所说的那样。另外,逻辑在应用程序内部,如果您需要扩展/更改域名,也不会丢失。不利的一面是,只要有人使用裸域名,您的完整堆栈就会受到打击。

before_filter您可以在您的应用程序控制器中尝试:

before_filter :redirect_to_www

def redirect_to_www
  redirect_to subdomain: 'www' unless request.subdomain == 'www'
end

如果您想避免“魔术重定向”并让每个人都清楚,在 rails 3 上,您可以直接在路线中执行此操作:

constraints ->(request){ request.subdomain != 'www' } do
  match '(*all)' => redirect( subdomain: 'www' )
end 

您还应该将子域添加到您的默认 url 选项(应用程序控制器):

def default_url_options( option = {} )
  {subdomain: 'www'}
end
于 2013-01-25T19:34:48.503 回答
0

最后,我要做的是将@-DNS 指向我的普通网络主机(因为@ 需要IP,而Heroku 只接受CNAME)并将www-DNS 指向Heroku。

在我的普通虚拟主机上,我放置了一个 .htaccess,将那里的所有流量重定向到我的 www 域,如下所示:

RewriteEngine On

### re-direct to www
RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]
于 2013-02-04T07:19:32.310 回答