Ruby on rails RubyonRails重定向到www。只有在没有子域的情况下

Ruby on rails RubyonRails重定向到www。只有在没有子域的情况下,ruby-on-rails,ruby,redirect,Ruby On Rails,Ruby,Redirect,我正在尝试重定向到www。只有当另一个子域不存在时 如果url是example.com,那么我想重定向到www.example.com 如果url是blog.example.com,那么我不想重定向 我已经尝试过了,但它会将www.添加到每个url,即使已经存在另一个子域 constraints(host: /^(?!www\.)/i) do get '' => redirect { |params, request| URI.parse(request.url).tap {

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

如果url是
example.com
,那么我想重定向到
www.example.com

如果url是
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
我想我需要检查
子域。是否存在?
某个地方,但不确定在哪里


有什么想法吗?

这对我很有用。不过,也许有更好的办法

  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

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

class ApplicationController
哦,是的!完全忘了,但我得等两天
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