使用Morph Labs的Appspace部署网站意味着没有自动方式将“myapp.com”重定向到“www.myapp.com”(并且无法访问.htacess)。
有这样的轨道方式吗?我需要一个像subdomain-fu这样的插件吗?
更具体地说,我正在尝试做类似的事情:
基本上,我总是希望每个请求都附加'www'子域名(因为SSL证书的具体名称是'www.myapp.com')。
答案 0 :(得分:30)
也许这样的事情可以解决问题:
class ApplicationController < ActionController::Base
before_filter :check_uri
def check_uri
redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host)
end
end
答案 1 :(得分:9)
卡森的回答很有效。
这是代码走另一条路(www - &gt; no www)
before_filter :check_uri
def check_uri
if /^www/.match(request.host)
redirect_to request.protocol + request.host_with_port[4..-1] + request.request_uri
end
end
答案 2 :(得分:5)
我不得不改变Carson的答案,让它在Rails 3中运行。我用request.fullpath替换了request.uri:
class ApplicationController < ActionController::Base
protect_from_forgery
Rails.env.production? do
before_filter :check_url
end
def check_url
redirect_to request.protocol + "www." + request.host_with_port + request.fullpath if !/^www/.match(request.host)
end
end
答案 3 :(得分:2)
这对我很有用。我确实做了一个小的补充,因为我只想在生产环境中使用这种行为:
def check_uri
redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host) if Rails.env == 'production'
end
答案 4 :(得分:1)
答案 5 :(得分:0)
以下是几种不同的方法:
head :moved_permanently, :location => ‘http://www.newdomain.com’
另一:
def rails_301
headers["Status"] = "301 Moved Permanently"
redirect_to "http://www.newdomain.com"
end
答案 6 :(得分:0)
对于那些希望使用heroku强制使用SSL的人来说,这对我来说很有效,基于Heroku SSL on root domain
在我的DNS设置中,我设置了一个URL /转发记录(DNS简单)
URL foo.com 3600 http://www.foo.com
只需为WWW设置CNAME设置
CNAME www.foo.com 3600 providedssslendpoint.herokussl.com
我还必须为我的root设置和Alias
ALIAS foo.com 3600 providedsslendpoint.herokussl.com
然后我决定简单地用env变量ENV['SITE_HOST']
替换 foo.com (其中SITE_HOST可能等于www.foo.com或test.foo.com)所以我可以控制通过我的heroku配置。这样,我可以控制在不同环境中发生的事情。 (用于在本地设置env变量,请参阅https://github.com/bkeepers/dotenv)
例如,我的测试应用使用 test.foo.com 作为网址,它也有自己的SSL端点,因此对我来说效果很好。
before_filter :check_domain
def check_domain
if Rails.env.production? || Rails.env.testing? and request.host.downcase != ENV['SITE_HOST']
redirect_to request.protocol + ENV['SITE_HOST'] + request.fullpath, :status => 301
end
end
从现在开始,最终用户将始终使用强制SSL访问www。旧的链接将遭受一个小挂,但没有什么值得注意的。