RoR'routes'文件是Apache'mod_rewrite'模块的替代品吗?

时间:2015-07-14 14:44:48

标签: ruby-on-rails apache

我是一名初级Web开发人员,以下问题仅仅是为了连接我脑中的几件新事物: RoR'routes'文件是Apache'mod_rewrite'模块的替代品吗?

提前感谢所有参与者。

3 个答案:

答案 0 :(得分:0)

它的相似之处在于它是一个url模式列表,每个模式都有一些与之关联的规则。

主要区别在于路由是INTERNAL到Rails:mod_rewrite通常会为任何路由做出决定,然后提供文件,或者将请求传递给另一个代理来处理,因此可以被认为是请求管道中的独立进程。

另一方面,

routes.rb可以被认为是在Rails中运行的东西,并决定哪个对象(对象通常是控制器)应该有一个调用它的方法,通过请求对象。也许这不是发生了什么,但它是这样的。 Rails就像一个黑盒子,请求进来,响应出来,路由在盒子里面。

所以,我想你可以说它是mod_rewrite的替代品,因为你可以只使用apache将所有请求传递给Rails并让Rails(使用routes.rb代码)将其弄清楚,而不是使用mod_rewrite。但这有点不同。

编辑:我刚读完这篇文章并意识到它很模糊。也许别人会给出一个更具体的答案:)

答案 1 :(得分:0)

基本上,是的。

这两个工具的目的是根据请求的某些属性将HTTP请求映射到适当的操作。通常,这些属性是使用的HTTP方法(GETPOSTDELETE等)和请求URI。虽然它有其他用途,但mod_rewrite的典型用例是将不同的URL模式映射到不同的脚本。另一方面,routes.rb将HTTP方法和URL模式("端点")映射到控制器方法(它有其他表达这些映射的方法,例如resource方法)

主要区别在于mod_rewrite总是在将控制权传递给客户端脚本之前将此路由逻辑作为Apache Web服务器的一部分执行。 routes.rb设置由Rails内部执行的路由逻辑。但两者都达到了同样的目的。 Rails路由更具可移植性,因为您可以在使用Apache,nginx或rails服务器之间切换,而无需每次都从头开始重写路由逻辑。 Apache重写规则往往有点难以理解,因此如果您对Rails路由感到满意,请务必使用它。

答案 2 :(得分:0)

我会说不。它们是两个不同的组件,用于不同的目的。

您可以运行Rails应用程序,而无需使用mod_rewrite,甚至Apache。如果没有routes.rb文件,则无法运行rails应用程序。

Rails routes.rb文件负责一些不同的事情。它是生成资源的URL的地方。它也是一个可以安装引擎的地方。

打个比方,考虑一下: Routes.rb是负责在您的应用程序中构建道路的工作人员。 Mod_rewrite是一个橙色背心的人,告诉你这条路是死路一条,沿着绕道而行。