使用mod_rewrite显示另一个目录中的文件

时间:2010-08-04 20:49:06

标签: apache mod-rewrite file

我已将所有文件从应该可以从外部访问的项目移动到单个public目录 - 因此,我可以将可访问的目录列入白名单,而不是将目录保持隐藏的黑名单。

但是我不能强迫apache重写这种网址:

  • www.example.com/images/flower.jpg

获取

  • <DOCUMENT ROOT> / 公开 /images/flower.jpg

我想出的唯一合理的解决方案就是这些内容:

RewriteCond public\/%{REQUEST_FILENAME} -f #if a file exists in the public dir,...
RewriteRule .* public/$0 [L]               #display it

不出所料,它不起作用,更准确地说,RewriteCond部分,我无法匹配。

我完全不知所措,有人可以帮忙吗?

作为一个附带问题,您如何调试.htaccess配置?如果我不知道它是什么以及它在哪里,我无法解决问题。

1 个答案:

答案 0 :(得分:1)

如果要使用-f测试现有文件,则需要提供如下的绝对文件系统路径:

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f
RewriteRule !^public/ public%{REQUEST_URI} [L]

否则使用-F通过子请求进行检查:

RewriteCond public%{REQUEST_URI} -F
RewriteRule !^public/ public%{REQUEST_URI} [L]