如何将子域映射到localhost中的现有控制器操作

时间:2016-07-21 15:02:35

标签: ruby-on-rails

我希望为此特定路线设置子域

    private void Form1_Load(object sender, EventArgs e)
    {
        try
        {
            using(WebClient WebClient = new WebClient())
            {
                WebClient.Headers.Add("User-Agent", "Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30");
                MessageBox.Show(WebClient.DownloadString("https://www.habbo.com/api/user/avatars/check-name?name=123"));
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

以前,该网址曾与 get 'product_list/home' 类似。现在我希望网址为localhost:3000/product_list/home

我已修改了这样的路线

store.dev:3000/product_list/home

在/ etc / hosts中。我添加了store.dev如下

 constraints subdomain: 'store' do 
      get 'product_list/home'
    end

但是在开发环境中访问127.0.0.1 localhost 127.0.0.1 store.dev 时,我的主页就像store.dev:3000一样。

但我想将我的子域限制为仅此路由localhost:3000

我面临的另一个问题是

当我访问

时,

http://store.dev:3000/product_list/home

我收到了这个

product_list/home

更新:

将主机文件中的条目从No route matches [GET] "/product_list/home" 更改为store.dev后,我可以访问store.local.dev但我的问题是我还可以访问其他页面,说我有store.local.dev:3000/product_list/home.页面。 about,但我不希望这种情况发生。如何将子域限制为仅一个特定路由

6 个答案:

答案 0 :(得分:1)

您的示例和大多数其他答案中的示例实际上根本不使用子域名:如果您查看域名store.dev,那么它实际上没有子域名,store.dev是顶级域名/根域。子域的示例是:sub.store.dev

如果您将 / etc / hosts 文件中的条目从store.dev更改为store.local.dev,那么您的代码就可以使用。

<强>更新

要回答问题的第二部分(将路由限制为仅限根域):您可以通过将仅应在其他constraints块中的根域上可用的路由包装为空来实现此目的子域:

constraints subdomain: '' do
  get '/about'
end

答案 1 :(得分:1)

您的路线文件代码是否正确

constraints subdomain: 'store' do get 'product_list/home' end

为了测试localhost使用以下url,无需在主机文件中进行更改 store.lvh.me:3000

lvh.me是使用127.0.0.1

映射的虚拟域名

https://reinteractive.net/posts/199-developing-and-testing-rails-applications-with-subdomains

答案 2 :(得分:0)

我认为您还需要将子域添加到/ etc / hosts文件中:

127.0.0.1   dev items.dev

答案 3 :(得分:0)

尝试将通配符子域添加到/ etc / hosts:

127.0.0.1 *.dev

或者,只需导航至http://items.lvh.me即可。 (此域的所有者将域和子域的所有DNS请求指向当前的127.0.0.1)

此外,您可能需要在启动服务器时绑定到正确的接口,因为127.0.0.1并不严格等同于localhost(默认情况下为rails服务器绑定的位置):

rails s -b 127.0.0.1

rails s -b 0.0.0.0 # all interfaces

请注意,后者可能被视为不安全,因为它会将您的开发服务器暴露给您的本地网络。

答案 4 :(得分:0)

来自Docs

  

基于请求的约束

     

您还可以根据任何方式约束路线   Request对象上返回String的方法。

     

您指定基于请求的约束的方式与指定a的方式相同   段约束:

     

get 'photos', to: 'photos#index', constraints: { subdomain: 'admin' }

     

您还可以以块形式指定约束:

namespace :admin do
  constraints subdomain: 'admin' do
    resources :photos
  end
end

更新

我发现this link提供了一种在开发机器上创建子域路由的方法。如果这也没有解决您的问题,那么还有另一种方式here

答案 5 :(得分:0)

我添加了另一个答案,因为问题已经从原来的问题发生了变化,而且我现有的答案已经不再适用了。

要确保您的子域store.domain.dev只有一个可用路由,您还需要将约束块中的路径 rest 包装起来:

# this matches store.domain.dev
constraints subdomain: 'store' do 
  get '/product_list/home'

  # add a redirect for the root path so you don't get a 404 
  # when browsing to store.domain.dev (optional)
  root '/', to: redirect('/product_list/home')
end

# this matches no subdomain and 'www' subdomain (i.e. domain.dev and www.domain.dev)
constraints subdomain: /^(|www)$/ do
  # put ALL your other routes here
  # ..
  # root '/', to: 'home#index'
end

对于问题的第二部分,您应该尝试使用domain.dev而不仅仅是dev,否则可能会错误地解释子域名。

此外,您应该使用get '/product_list/home'而不是仅使用Rails路由指南中指定的get 'product_list/home'http://guides.rubyonrails.org/routing.html