Apache访问/ media /而不是DocumentRoot / media

我的Apacheconfiguration有以下语句:

DocumentRoot /home/x/public/ <Location /> Order Allow,Deny Allow from all Options -ExecCGI -Indexes </Location> 

在/ home / x / public /目录下有一个目录/

  RewriteRule ^(/media/.+) $1 [L] 

媒体文件应该保持不变并由Apache提供 – 其他请求被redirect到Ruby on Rails代理服务器。

每当我尝试通过浏览器访问/ media下的文件时,Apache会尝试提供/ media / file(在文件系统根目录上)而不是/ home / x / public / media / file

如果我将/ media重命名为/ medias,文件/ home / x / public / media /文件将被正确地提供。

我怎样才能防止这种行为?

编辑:添加mod_rewrite日志:

如果“mv / media / / medias”:

 applying pattern '^(/media/.+)' to uri '/media/css/TableTools.css' rewrite '/media/css/TableTools.css' -> '/media/css/TableTools.css' local path result: /media/css/TableTools.css prefixed with document_root to /home/x/public/media/css/TableTools.css go-ahead with /home/x/public/media/css/TableTools.css [OK] 

如果“mv / medias / media”:

 applying pattern '^(/media/.+)' to uri '/media/css/TableTools.css' rewrite '/media/css/TableTools.css' -> '/media/css/TableTools.css' local path result: /media/css/TableTools.css go-ahead with /media/css/TableTools.css [OK] 

从RewriteRule文档 (重点是我的):

重写规则的replace是replace与Pattern匹配的原始URLpath的string。 换人可能是:

文件系统path

指定要传递给客户端的资源的文件系统上的位置。 在服务器(虚拟主机)上下文中configuration规则replace仅作为文件系统path处理,replace中的第一个组件位于文件系统中

由于文件系统中存在“/ media”,因此您正在对“replace”string进行这种解释。 一个更好的方式来做你想做的事情

 RewriteRule ^(/media/.+) - [L] 

-意思是“根本不重写,只应用附加在RewriteRule上的标志” – 所以在这种情况下, [L]标志将被应用,并且mod_rewrite将不会尝试使用这个请求的任何其他规则。