我想知道是否有人知道是否有办法配置 Apache,以便 URL http://myurl.com/clips/song1.mp3使 Apache 获取歌曲1.mp3在任一目录1或者目录2?
提前致谢!
-亚历克斯
答案1
有几种方法可以实现这一点。
有人建议,只需编写一个名为的 PHP 页面clips.php
,并Options +MultiViews
在文件<Directory>
中的声明或位于的DocumentRoot 目录中的文件httpd.conf
中声明。我使用此方法来处理我的.htaccess
clips.php
GPG 密钥策略管理器使用PATH_INFO
来通过同一个 PHP 文件控制多个功能。然后,您可以让它解析所请求的文件名,然后在任一目录中查找要输出回客户端的文件,确保在开始流式传输文件之前为内容PATH_INFO
设置正确的功能。header()
我过去使用的另一个选项是确定哪个目录(目录1或者目录2) 是主目录,并为该目录创建/clips/
一个。然后设置一个规则,检查文件是否存在于其他目录中,并让 Apache 交出该副本。我更多地在需要覆盖目录中现有文件的情况下使用这种方法,通常是用 Web 应用程序中的较新副本覆盖文件。Alias
mod_rewrite
这两个建议都取决于您的脚本编写或配置修改技能是否更强。创建 PHP 文件可能是实现此目的的更通用的方法,但它绝不是完成相同任务的唯一方法。
答案2
除了创造性地使用 mod_rewrite 之外,您可能还想研究使用 unionfs 在文件系统级别合并多个目录。无论如何,当您通过 FUSE 提供服务时,最好使用“EnableSendfile off”。
答案3
有很多种方法可以处理它。
最直接的方法是让“剪辑”成为 CGI 或其他脚本,查看发送的 PATH_INFO,然后查找您想要的目录。
...对于不太直接的...让“剪辑”指向“目录 1”,然后为该目录添加一个 404 处理程序,该处理程序将在目录 2 中查找,如果找到该文件则调整响应。
答案4
我以前使用 .htaccess、mod_rewrite 和 php 做过这个。
.htaccess 如下所示,例如:
RewriteEngine on
RewriteRule ^clips\.*$ /path/to/script/script.php?i=$1
在您的 PHP 脚本中,您将获取 i 变量并剥离路径信息:
$file=basename($_GET['i']);
清理 $file 以防止任何人读取系统上的任何文件。然后使用 PHP 表达式搜索并查看要提供的目录(如果有)。您还可以通过此 php 脚本进行任何类型的跟踪或处理。