我正在尝试重定向到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?
,但不确定在哪里。
有什么想法吗?
答案 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