Ruby on Rails重定向到www。只有当没有子域时

时间:2013-12-13 13:19:09

标签: ruby-on-rails ruby redirect

我正在尝试重定向到www。仅当不存在另一个子域时。

如果网址为example.com,那么我想重定向到www.example.com

如果网址为blog.example.com,那么我不想重定向。

我试过这个,但它添加了www。即使另一个子域已经存在,也要到每个URL。

constraints(host: /^(?!www\.)/i) do
  get '' => redirect { |params, request|
    URI.parse(request.url).tap { |uri| uri.host = "www.#{uri.host}" }.to_s
  }
end

我想我需要在某处检查subdomain.present?,但不确定在哪里。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这对我有用。尽管如此,可能还有更好的方法。

  constraints(subdomain: '') do
    constraints(host: /^(?!www\.)/i) do
      get '' => redirect { |params, request|
        URI.parse(request.url).tap { |uri| uri.host = "www.#{uri.host}" }.to_s
      }
    end
  end

答案 1 :(得分:1)

我在应用程序控制器中进行了以下操作(Rails 6):

class ApplicationController < ActionController::Base
  before_action :ensure_www
  
  # Other stuff

  protected
  def ensure_www
    if request.subdomain != 'www'
      redirect_to url_for(subdomain: 'www', only_path: false)
    end
  end
end