我想在apache中创建一个设置,我的媒体文件从我的代码中拆分(以便于项目管理)。我创建的想法是有一个根目录(/ home / villermen / httpd / root),其中包含所有代码(php文件,css文件等)和一个媒体目录(/ home / villermen / httpd / media),其中包含所有非文本文件。
执行此设置已被证明是棘手的。我试图使用mod_rewrite来提供媒体目录中的文件(如果它们存在),但到目前为止我还没有成功。
这是我的httpd.conf中我试图让魔术发生的部分:
DocumentRoot /home/villermen/httpd/root
RewriteEngine on
<Directory /home/villermen/httpd/root>
Order allow,deny
Allow from all
AllowOverride All
#...other magic magoo, including rewriterules that do work
</Directory>
<Directory /home/villermen/httpd/media>
Order allow,deny
Allow from allow
AllowOverride All
</Directory>
#Serve from media if file exists there
RewriteCond "/home/villermen/httpd/media%{REQUEST_URI}" -f
RewriteRule "^/?(.*)$" "/home/villermen/httpd/media/$1"
尝试访问媒体文件夹中存在的文件仍会引发404,我在这里不知所措。有什么我没看到的吗?
我在ubuntu 14.04上使用apache 2.4。
编辑:完全删除RewriteCond仍然不会发生任何魔法。 mod_rewrite应该在Directory标签之外工作吗?
更新:请参阅@ kannan-mohan的可能答案如下。最后,我采用了将webroot中的媒体文件夹链接到它的文件夹,然后将所有内容重写到那里的方法:
DocumentRoot /home/villermen/httpd/root
Alias /media /home/villermen/httpd/media
<Directory /home/villermen/httpd/root>
#Serving files from media if they exists there
RewriteCond "/home/villermen/httpd/media%{REQUEST_URI}" -f
RewriteRule "^(.*)$" "/media/$1"
</Directory>
<Directory /home/villermen/httpd/media>
Order allow,deny
allow from all
AllowOverride All
</Directory>
答案 0 :(得分:2)
如果我的理解是正确的,你需要的是如下。
http://example.com/media/hello.jpg
应映射到/home/villermen/httpd/media/hello.jpg
http://example.com/media/video/world.mp4
应映射到/home/villermen/httpd/media/video/world.mp4
media
目录中不存在该文件,则应该root
目录中获取图像。因此http://example.com/media/video/world.mp4
应映射到/home/villermen/httpd/root/video/world.mp4
在这种情况下,下面的配置就足够了。
<VirtualHost *:80>
ServerName example.com
DocumentRoot /home/villermen/httpd/root
RewriteEngine on
RewriteCond "%{DOCUMENT_ROOT}..%{REQUEST_URI}" -f
RewriteCond %{REQUEST_URI} .*\.jpg$ [OR]
RewriteCond %{REQUEST_URI} .*\.mp4$
RewriteRule (.*) "%{DOCUMENT_ROOT}..$1" [L]
RewriteRule /media/(.*) /$1 [L]
</VirtualHost>
为了增加安全性,RewriteCond
还将检查所请求的文件是jpg
还是mp4
,然后才会重写。可以通过在每个条件结束时附加[OR]
标志来添加更多媒体类型。