我的Apache配置有以下语句:
DocumentRoot /home/x/public/
<Location />
Order Allow,Deny
Allow from all
Options -ExecCGI -Indexes
</Location>
/home/x/public/下面有一个目录/media
RewriteRule ^(/media/.+) $1 [L]
媒体文件应该保持不变,并由Apache提供服务--其他请求被重定向到Rails代理服务器。
每当我试图通过浏览器访问/media下的文件时,Apache尝试服务/media/file (在文件系统根目录dir上),而不是/home/x/public/media/file
如果我将/media重命名为/medias,文件/home/x/public/media/file将得到正确的服务。
我怎样才能防止这种行为?
编辑:添加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]
发布于 2012-02-14 12:15:01
来自重写规则文档 (n.b.我的重点是):
重写规则的替换是替换由模式匹配的原始URL路径的字符串。替换可以是:文件系统路径,指定要传递给客户端的资源的文件系统上的位置。只有在服务器(虚拟主机)上下文中配置规则并且替换中的路径的第一个组件存在于文件系统中时,替换才被视为文件系统路径。
因为"/media“存在于文件系统中,所以您正在点击对”替换“字符串的解释。做你想做的事的更好的方法是
RewriteRule ^(/media/.+) - [L]
如果-
的意思是“根本不重写,只应用附加到RewriteRule的标志”,那么在这种情况下,[L]
标志将被应用,mod_rewrite不会尝试对此请求使用任何其他规则。
https://serverfault.com/questions/359916
复制相似问题