前几天做一个小修改,就是对一些请求做一个跳转,于是我在 http.conf 文件中做了如下的修改(摘录其中重点部分如下),其中1部分即为新增的用于跳转的配置。
后来在调试过程中,即使我的匹配规则为永真,仍然没有进行1部分的跳转。后来才发现原来是由于下面配置了一个 virtualhost 的关系。
我们知道 httpd.conf 是由三部分组成的:全局配置、服务器配置、virtualhost 配置。全局配置是指影响所有请求的配置,如日志、请求的超时时间、最大请求数,还有一些 module 等 ; 服务器配置用于定义主服务器的参数,如服务器监控端口、文档目录的权限等等。
而所谓的 virtual host 根据表面意思来并不好理解,它其实定义了处理某一类特定 url 请求的处理代码。只要这些所请求的 url 能与 virtualhost 中的 NameVirtualHost 后面的下则表达式相匹配,那么这些请求就会被这个 VirtualHost 内部的代码所处理,而不会被其他 VirtualHost处理。
但是 virtualhost的匹配有以下几个规则:
1、当你不配置 virtualhost 时,在 http.conf 中直接写 rewriter 的代码是可以起作用的
2、但是一旦定义了一个 virtualhost, 则写在virtualhost 外的代码则不会起作用
3、这些所请求的 url 会逐一的去比对各个 virtualhost 的规则,如果匹配则处理
4、如果没有一个 virtualhost的规则能够匹配,则默认使用第一个 virtualhost 来进行处理
因此如果要想rewrite起效果,要么配置一个virtualhost来处理,要么就不定义任何一个virtualhost,直接在httpd.conf中配置跳转。