我的/blog
目录只是一堆静态HTML文件。那很好。
当我转到localhost/blog
它工作正常时 - 它为我的中间人生成了博客的index.html。大。
但是当我点击任何帖子时,它会给我一个路由错误:
No route matches [GET] "/blog/2015/03/11/hello_world"
我很确定发生这种情况的原因是因为routes.rb
中的其中一条规则:
get '/:friendly_id', to: 'posts#show'
get '/rbt/:name', to: redirect {|path_params, _| "/#{path_params[:name].gsub(/^\d+\-/, '')}" }
get ':name', to: 'posts#show'
我需要所有这些路由,但我不希望HTML请求不必要地访问我的Rack中间件......或者更糟糕的是,执行此错误似乎表明正在进行的数据库查询。
如何将所有请求限制在/blog/
以仅解析到我的public/blog/
目录?
修改1
我意识到上面的描述可能不太清楚。我的Rails应用程序不是博客,因此您在上面引用的posts
不是博客的帖子。它们是另一种类型的帖子,由Rails应用程序分别由DB和所有人管理。我之后添加了一个真实的/blog
,它只是MiddleMan生成的HTML文章的集合,它将位于我的Rails /public/blog
文件夹中。想法是我的/blog
目录中的HTML文件根本不应该打到我的Rack中间件。
答案 0 :(得分:4)
您可以通过将config.middleware.use Rack::Static, urls: ['/blog'], root: 'public'
添加到config / application.rb来强制机架将某个文件夹作为静态和路由忽略但是最好设置一个Web服务器来拦截和提供/博客比您的应用更早
同样在你的情况下/blog/2015/03/11/hello_world
似乎是一个目录名,如果你将index.html
添加到它应该按预期工作的链接,而不改变任何配置。
答案 1 :(得分:1)
当您的应用程序由Web服务器运行时,其webroot将成为公共目录。所以,如果你的博客目录在公共目录中,这应该可行。 localhost/blog
尝试使用nginx
与以下配置一起运行:
root /root/path/to/your_app/public;
答案 2 :(得分:1)
无法创建static_url
控制器并配置路由以便
get '/blog', to: 'static_url#show'
然后在你的控制器中
def show
render file: request.fullpath
end
抱歉,我现在无法测试,但我相信你明白了。另外,我猜你需要检测不存在的页面。