【问题标题】:Redirect http://domain.com/subpage to http://www.domain.com/subpage in Rails在 Rails 中将 http://domain.com/subpage 重定向到 http://www.domain.com/subpage
【发布时间】:2013-01-09 17:56:34
【问题描述】:

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

我正在使用 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(没有子页面)。

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

DNS? 路线? .ht 访问? (如果是这样,我如何更改 RubyOnRails 中的 .htaccess)

提前致谢!

【问题讨论】:

    标签: ruby-on-rails redirect dns


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢,不过我使用的是瑞典供应商,但他们似乎没有这样的服务。
      【解决方案3】:

      (注意:没有尝试过,但应该可以)

      有人可能会争辩说,不错的方法是使用 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
      

      【讨论】:

        【解决方案4】:

        最后我要做的就是将@-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]
        

        【讨论】:

        • 请注意,并非所有网络服务器都支持.htaccess
        • 不,这取决于网络服务器。 Apache 是一个支持.htaccess 的网络服务器示例,它可以在 Windows 和 Linux 上运行。
        猜你喜欢
        • 1970-01-01
        • 2016-02-20
        • 2015-12-26
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多