我使用的是 Ubuntu 22.10,我在 /var/www/html 文件夹中使用 Apache2 托管本地网站。在我的 html 中,我获取了 /media/dale/Movies 上的视频 - 这是一个外部驱动器 -
(我的部分代码如下:
div class="wrapper" <br>
h3> Die Hard 3 </h3 <br>
div id="Die Hard 3" <br>
video width="400" height="300" <br>
video src="/media/dale/Movies/Die Hard 3.mp4" controls <br>
/div>
我已将问题缩小到电影的路径。如果我将电影移至 html 文件夹内,电影将正常运行。如果我尝试将电影源置于外部文件夹,则无法播放电影。我尝试更改权限,在开头添加 / 和 ..,但到目前为止,这些都不起作用。
任何帮助,将不胜感激。
答案1
/
路径中的起点,例如/whatever
,意味着所引用的内容位于根目录,即文件系统层次结构的最顶层。
但是,由于涉及到网络服务器,这个词根的含义略有修改:
/media/dale/whatever
通常被您和操作系统解释为引用操作系统物理文件系统的根目录的内容。但在由 Web 服务器提供的 (HTML) 文档上下文中,
/
将表示“公共文档根”。它表示localhost/
并且由于您的
localhost
映射到/var/www/html/
操作系统的物理文件系统,当您提供的文档引用时/media/dale/whatever
,它最终将被解释为/var/www/html/media/dale/whatever
,但实际上并不存在。
您可以将所提供文件放入 中/var/www/html/
,也可以将服务器配置为提供 的内容,/media/dale/
而不是/var/www/html/
。 (在后一种情况下,您还需要将您的index.html
放入 中/media/dale/
。)
另一个想法是 - 虽然我从未尝试过,所以我不知道它是否可能 - 但您可以尝试保留服务器配置和文件的位置,并尝试使用符号链接指向文件,或指向包含目录,从您的正常服务器文档根目录...
(与此同时,我找到了这个。因此您需要通过 启用 Apache 中的符号链接FollowSymLinks
,同时在目标上应用足够的访问权限。)
更新:
我还有一个想法,但这也是我还没有尝试过的事情,所以我不确定是否可行。
Apache 网络服务器具有一项称为“虚拟主机”的功能,这使得可以同时为文件系统中的多个位置提供服务 — — 不仅仅是/var/www/html/
,还包括其他位置。
方法如下:
https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-20-04
现在,您可以尝试一种 hack,定义一个新的虚拟主机来指向/media/dale/
。文档的相关部分从步骤 4 开始。我不知道这是否很容易实现,但我会研究一下。
如果这个虚拟主机技巧可行,那么在 HTML 文件中,您可以ServerAlias
在链接到媒体文件时引用此虚拟主机的值(在src=""
属性中)。这就像您指向另一个额外的外部 Web 服务器一样。因此,您的浏览器会将来自两个不同来源的内容汇集在一起:HTML 文档本身将从/var/www/html/
(根据您当前的配置,从浏览器以“localhost”访问)到达,而媒体文件将从虚拟主机服务器别名到达。除非我不知道有什么问题,否则 Apache 应该很乐意将它们都提供给浏览器。