Apache - 提供子目录中的所有文件

时间:2015-05-30 09:09:41

标签: apache mod-rewrite alias subdirectory

我的服务器充当个人文件共享。我想设置一个包含随机文件的文件夹_misc。此外,我需要_misc中的额外文件夹作为文件的类别。我过去几晚尝试做的是配置它,以便可以从域根目录访问_misc及其子文件夹中的所有文件。

Examples:
www.example.com/_misc/chatlog.txt
www.example.com/_misc/food/burgers.jpg
www.example.com/_misc/sounds/soundclip.mp3

Can all be accessed as:
www.example.com/chatlog.txt
www.example.com/burgers.jpg
www.example.com/soundclip.mp3

同样,我需要正常提供文件系统的其余部分。我将保留root中的其他文件,以及一些Wordpress站点和auth文件夹以及一般服务器相关的东西。

我尝试使用别名,这几乎可以工作。我不介意配置_misc中的每个文件夹,因为那里< 12。但是,我不认为别名允许多次调用" /"它还会重定向实际的" /"到" _misc"。

如果mod_rewrite允许我在目录端使用正则表达式,它几乎可以工作。

我是程序员,我最后的办法是使用mod_rewrite的外部程序,它可以扫描_misc并返回所请求文件的实际路径。我不确定这会有多好用。

还有其他想法吗?感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用以下未经测试的mod_rewrite rewriterules。请注意,这可能会对服务器造成负担,因为对于服务器的每个请求,都会执行大量子请求来检查服务器上是否存在文件。因此,服务器可能无法提供尽可能多的请求/分钟。环境变量技巧可以防止发出更多请求。

如果可以,请在httpd.conf中使用它,而不是.htaccess。

false

我不确定RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ - [E=notfound:1] RewriteCond %{ENV:notfound} =1 RewriteCond %{DOCUMENT_ROOT}/_misc/$1 -f RewriteRule ^([^/]+)$ /_misc/$1 [L,E=!notfound] RewriteCond %{ENV:notfound} =1 RewriteCond %{DOCUMENT_ROOT}/_misc/food/$1 -f RewriteRule ^([^/]+)$ /_misc/food/$1 [L,E=!notfound] RewriteCond %{ENV:notfound} =1 RewriteCond %{DOCUMENT_ROOT}/_misc/sounds/$1 -f RewriteRule ^([^/]+)$ /_misc/sounds/$1 [L,E=!notfound] 是否包含尾部斜杠。您可能需要将其写为%{DOCUMENT_ROOT}