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

Apache - Serve all files in subdirectories

我的服务器充当个人文件共享。我想建立一个包含随机文件的文件夹_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

另外,我需要文件系统的其余部分正常运行。我将保留根目录中的其他文件,以及一些 Wordpress 站点和 auth 文件夹以及与服务器相关的一般内容。

我试过用alias,差不多可以用。我不介意在 _misc 中配置每个文件夹,因为有 <12 个。但是我不认为别名允许多次调用“/”,它还会将实际的“/”重定向到“_misc”。

如果允许我在目录端使用正则表达式,

mod_rewrite 几乎可以工作。

我是一名程序员,我最后的选择是使用外部程序 mod_rewrite,它可以扫描 _misc 和 return 所请求文件的实际路径。不过,我不确定效果如何。

还有其他想法吗?谢谢

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

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ - [E=notfound:1]

RewriteCond %{ENV:notfound} =1
RewriteCond %{DOCUMENT_ROOT}/_misc/ -f
RewriteRule ^([^/]+)$ /_misc/ [L,E=!notfound]

RewriteCond %{ENV:notfound} =1
RewriteCond %{DOCUMENT_ROOT}/_misc/food/ -f
RewriteRule ^([^/]+)$ /_misc/food/ [L,E=!notfound]

RewriteCond %{ENV:notfound} =1
RewriteCond %{DOCUMENT_ROOT}/_misc/sounds/ -f
RewriteRule ^([^/]+)$ /_misc/sounds/ [L,E=!notfound]

我不确定 %{DOCUMENT_ROOT} 是否包含尾部斜线。您可能需要将其写为 %{DOCUMENT_ROOT}_misc