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

Apache-为子目录中的所有文件提供服务,apache,mod-rewrite,alias,subdirectory,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 al

我的服务器充当个人文件共享。我想设置一个文件夹_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中配置每个文件夹,因为有可以使用以下未经测试的mod_重写规则。请注意,这可能会对服务器造成负担,因为对于向服务器发出的每个请求,都会执行许多子请求来检查服务器上是否存在文件。因此,服务器很可能无法以其他方式每分钟处理尽可能多的请求。环境变量技巧是为了防止更多的请求被发出

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

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\u ROOT}
是否包含尾部斜杠。你可能需要把它写成
%{DOCUMENT\u ROOT}\u misc

天哪,亲爱的!我从没想过重写会如此强大。我只知道基本的重写规则命令。所以我今天早上实现了你的脚本,并了解了它的作用。在我的特定设置中,无论documentroot后面是否有斜杠,代码中的斜杠都是可选的。奇怪的我必须调整顶行以包含根,并在正则表达式中添加斜杠,如下所示:^/(…关于吞吐量,您也说得对,在大约100k/分钟之前从本地网络进行测试。使用此代码,即使文件已经存在于根目录中,也大约是25k/分钟。但是,响应时间更快,而且对于大量请求,服务器cpu使用率从30%下降到这就是directorycontext之间的差异(.htaccess,blocks)和virtualhost上下文(blocks)。