【发布时间】:2015-03-28 16:05:05
【问题描述】:
我想在 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 应该在目录标签之外工作吧?
更新:请参阅下面的@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>
【问题讨论】:
标签: apache mod-rewrite httpd.conf