Ruby on Rails重定向到www。仅当不存在子域时

Ruby on Rails redirect to www. only if no subdomain is present

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

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

如果url是blog.example.com,则我不想重定向。

我已经尝试过了,但是它添加了www。即使已存在另一个子域,也可以访问每个URL。

1
2
3
4
5
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?,但不确定在哪里。

有什么想法吗?


这对我有用。不过,也许有更好的方法可以解决此问题。

1
2
3
4
5
6
7
  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):

1
2
3
4
5
6
7
8
9
10
11
12
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