如何从Rails 2.3.3中的example.com/products重定向到www.example.com/products

时间:2016-07-02 02:26:11

标签: ruby-on-rails http-status-code-301

我已成功使用代码将我的应用程序从example.com重定向到www.example.com

我使用以下内容:

class ApplicationController < ActionController::Base


  before_filter :ensure_domain


  APP_DOMAIN = "www.example.com"
  NAKED_DOMAIN = "example.com"
protected 

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

这适用于转到主页的链接。

但是我刚才意识到,如果我有以下网址:

example.com/products

用户被重定向到www.example.com的主页,而不是www.example.com/products

如何重定向到用户尝试访问的网址,但是www.example.com根目录而不是example.com root。

换句话说,如果用户想要以下内容:

example.com/products

我发送给

www.example.com/products

感谢您的帮助。

我在Heroku上托管。 我正在使用Zerigo DNS。当我尝试使用DNS将所有流量从裸域转发到www.example.com域时,URL仍会显示裸域。

所以这不起作用。

1 个答案:

答案 0 :(得分:2)

这是DNS设置的工作而不是您的Rails应用程序。 为此,您需要创建A记录。

数字海洋建议你这样做

https://www.digitalocean.com/community/tutorials/how-to-redirect-www-to-non-www-with-nginx-on-ubuntu-14-04

所以你最终得到两条指向同一个ip的A记录

  @ your_ip_address
  www your_ip_address

看一看 http://jaketrent.com/post/add-zerigo-dns-to-heroku/

具体地

  
      
  1. 在Heroku上添加域名
  2.         

    通过Heroku cli,输入:

         

    1

         

    heroku域名:添加www.yourapp.com

         

    请注意,我们不想在此添加yourapp.com(没有“www”)   方式。如果你这样做,该工具会向Zerigo添加多个A记录,   Zerigo文档清楚地说明了你不想要的东西。这些A记录   是什么将通过Bamboo堆激活路由,你   我想避免。

         

    这应该是您可以刷新浏览器的时间点   “yourapp.com”。您应该看到重定向发生,将您带到   “www.yourapp.com”。在Heroku结束时路由应该很开心。它   有时需要更多的时间来传播,所以如果你没有看到   结果立即,在你开始改变之前有点耐心   配置,认为它不起作用。

或者在您的服务器中执行此操作,然后nGinx示例可能如下所示

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

耐心等待。传播需要时间

您绝对不应该在适用于任何环境的应用程序代码中执行此操作,无论是PHP,Rails还是其他任何内容

您尚未提供服务器或您将运行的域的任何详细信息,因此无法为您的环境提供特定的解决方案,但上述内容应足以解决您的问题