我已成功使用代码将我的应用程序从example.com重定向到www.example.com
我使用以下内容:
class ApplicationController < ActionController::Base
before_filter :ensure_domain
APP_DOMAIN = "www.example.com"
NAKED_DOMAIN = "example.com"
protected
def ensure_domain
if request.env['HTTP_HOST'] == NAKED_DOMAIN && RAILS_ENV =='production'
#HTTP 301 is a permanent redirect
redirect_to "http://#{APP_DOMAIN}", :status => 301
end
end
这适用于转到主页的链接。
但是我刚才意识到,如果我有以下网址:
example.com/products
用户被重定向到www.example.com的主页,而不是www.example.com/products
如何重定向到用户尝试访问的网址,但是www.example.com根目录而不是example.com root。
换句话说,如果用户想要以下内容:
example.com/products
我发送给
www.example.com/products
感谢您的帮助。
我在Heroku上托管。 我正在使用Zerigo DNS。当我尝试使用DNS将所有流量从裸域转发到www.example.com域时,URL仍会显示裸域。
所以这不起作用。
答案 0 :(得分:2)
这是DNS设置的工作而不是您的Rails应用程序。 为此,您需要创建A记录。
数字海洋建议你这样做
所以你最终得到两条指向同一个ip的A记录
@ your_ip_address
www your_ip_address
看一看 http://jaketrent.com/post/add-zerigo-dns-to-heroku/
具体地
- 在Heroku上添加域名
醇>通过Heroku cli,输入:
1
heroku域名:添加www.yourapp.com
请注意,我们不想在此添加yourapp.com(没有“www”) 方式。如果你这样做,该工具会向Zerigo添加多个A记录, Zerigo文档清楚地说明了你不想要的东西。这些A记录 是什么将通过Bamboo堆激活路由,你 我想避免。
这应该是您可以刷新浏览器的时间点 “yourapp.com”。您应该看到重定向发生,将您带到 “www.yourapp.com”。在Heroku结束时路由应该很开心。它 有时需要更多的时间来传播,所以如果你没有看到 结果立即,在你开始改变之前有点耐心 配置,认为它不起作用。
或者在您的服务器中执行此操作,然后nGinx示例可能如下所示
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
耐心等待。传播需要时间
您绝对不应该在适用于任何环境的应用程序代码中执行此操作,无论是PHP,Rails还是其他任何内容
您尚未提供服务器或您将运行的域的任何详细信息,因此无法为您的环境提供特定的解决方案,但上述内容应足以解决您的问题