如何让 Apache 使用一个通用 URL 在两个独立的目录中查找?

如何让 Apache 使用一个通用 URL 在两个独立的目录中查找?

我想知道是否有人知道是否有办法配置 Apache,以便 URL http://myurl.com/clips/song1.mp3使 Apache 获取歌曲1.mp3在任一目录1或者目录2

提前致谢!
-亚历克斯

答案1

有几种方法可以实现这一点。

有人建议,只需编写一个名为的 PHP 页面clips.php,并Options +MultiViews在文件<Directory>中的声明或位于的DocumentRoot 目录中的文件httpd.conf中声明。我使用此方法来处理我的.htaccessclips.phpGPG 密钥策略管理器使用PATH_INFO来通过同一个 PHP 文件控制多个功能。然后,您可以让它解析所请求的文件名,然后在任一目录中查找要输出回客户端的文件,确保在开始流式传输文件之前为内容PATH_INFO设置正确的功能。header()

我过去使用的另一个选项是确定哪个目录(目录1或者目录2) 是主目录,并为该目录创建/clips/一个。然后设置一个规则,检查文件是否存在于其他目录中,并让 Apache 交出该副本。我更多地在需要覆盖目录中现有文件的情况下使用这种方法,通常是用 Web 应用程序中的较新副本覆盖文件。Aliasmod_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 脚本进行任何类型的跟踪或处理。

相关内容