新手问题 把二级栏目变成二级域名,请问怎么配置好?

gxlonline · 2016年11月28日 · 最后由 Insub 回复于 2017年12月03日 · 2326 次阅读

目的

http://www.abc.com/news 变成 http://news.abc.com

相应的 http://www.abc.com/news/hot 则变成 http://news.abc.com/hot

现在的配置

router.rb

Rails.application.routes.draw do
  resources :news, except: [:new, :create, :update, :edit] do
      collection do
          get 'hot/(:page)' => 'news#hot', as: :hot
          get 'search/:value' => 'news#search', as: :search
      end
  end
end

DNS

服务器是阿里云 ECS,域名绑定 IP 解析。

问题

  • 请问 router.rb 怎么配置?参考了https://ruby-china.org/topics/28065。 总感觉哪里不对,所有的链接都变成手动硬编码了,但用上 resources 后不是在二级域名下还是有二级目录,如http://news.abc.com/new/hot

    constraints :subdomain => news do
    get '/' => 'news#index', as: :news
    get 'hot/(:page)' => 'news#hot', as: :hot
    get 'search/:value' => 'news#search', as: :search
    end
    
  • _path 和_url 的该怎么使用?需要每次指定 subdomain 吗?

  • 域名解析怎么做?泛解析还是把所有域名都用 CNAME 指向 ECS 的域名?

  • 需要配置 ngnix 吗?

不好意思问题比较多,新手好多不懂,先谢谢了。

这东西,,在 nginx 里面搞好像比较方便

constraints :subdomain => "admin" do
    scope :module => "admin", :as => "admin" do
      resources :wares
    end
end

跑个题,这是给自己找堵。

门户网站比如 zhidao.baidu.com tieba.baidu.com news.qq.com buluo.qq.com,这些是因为实在没法放在一个域名下,这些栏目都是一个栏目一个团队运营的,不得不把他们分开,然后通过统一的 session 来管理登陆状态。

几年前个人网站比较火的时候,论坛用 discuz,主站用 dedecms,商城用 ecshop,放在一个域名下实在太容易冲突,不得已把它们分成一个个的子域名,然后通过 ucenter 艰难的把用户系统整合在一起。

现在 rails 这么方便分栏目,一个栏目一个 namespace,你却又要把它们分成不同的域名,这不是自己跟自己过不去吗?麻烦不说,光网站 PR 值被分散,就亏大了。

豆瓣比较明智,小组和同城的访问量都挺大,但还是没用独立二级域名。

我也是找堵,在这种找堵的帖子下面回复这么多。

4 楼 已删除

#3 楼 @Trump 总统先生说得很有道理

如果不考虑 seo 的话 那就 nginx rewrite 重定向呗! 偷偷的说,我也有这需求,将老项目做前后端分离,在未完全分离开时,就用 Nginx 规则指向两个网站,保证用户在前端看着就是一个站;

说实话,变成二级域名就为了好看点.....

貌似看到了 4 个缩进。。。。

@easonlovewan 在 coding.net 的 webIDE 上写的,缩进确实有问题。实在看不下去了再 clone 到本地格式化一下。

今天参照这个帖子配置子域名的路由,发现有个问题

如果子域名路由和主域名路由同时存在,那么 resources 的 new 和 edit 路由只会在主域名路由下生效

例如:

resources :posts
constraints :subdomain => "wx" do
   scope module: 'wx', as: 'wx' do
     resources :posts
   end
 end

这种情况下,wx.localhost:3000/posts 没有问题可以走到 wx/posts/index 去,但是 wx.localhost:3000/posts/new 则还是会访问主域名的 posts 控制器的 new 方法

而如果把 resources 放到 constraints 后面去,

constraints :subdomain => "wx" do
   scope module: 'wx', as: 'wx' do
     resources :posts
   end
 end
resources :posts

那么主域名和子域名的路由则都正常

Rails 版本是 4.2.5.2

需要 登录 后方可回复, 如果你还没有账号请 注册新账号