如何使用file:scheme在html中指定本地文件?

如何使用file:scheme在html中指定本地文件?,html,url,file-uri,Html,Url,File Uri,我正在加载一个托管在OS X内置Apache服务器上的html文件,在该文件中,我链接到同一目录下的另一个html文件,如下所示: <a href="2ndFile.html"><button type="submit">Local file</button> 本地文件 这很有效。然而(由于太长的原因,我正在尝试使用file:scheme代替它,但是我无法让任何东西工作。以下是我如何使用文件重新编写上述行: <a href="file://192.1

我正在加载一个托管在OS X内置Apache服务器上的html文件,在该文件中,我链接到同一目录下的另一个html文件,如下所示:

<a href="2ndFile.html"><button type="submit">Local file</button>
本地文件
这很有效。然而(由于太长的原因,我正在尝试使用file:scheme代替它,但是我无法让任何东西工作。以下是我如何使用文件重新编写上述行:

<a href="file://192.168.1.57/~User/2ndFile.html"><button type="submit">Local file</button>
本地文件
(192.168.1.57是我当前的IP地址)

将其更改为以下内容也不起作用:

<a href="file://Name-Of-MacBookPro/~User/2ndFile.html"><button type="submit">Local file</button>
本地文件

但是找不到该文件,应如何使用file:scheme指定它?

该“文件”协议不是网络协议。所以file://192.168.1.57/~User/2ndFile.html根本没有什么意义

问题是如何加载第一个文件。这真的是使用web服务器完成的吗?听起来不像。如果是,那么为什么不使用相同的协议,最有可能是http?您不能期望简单地切换协议并以相同的方式使用两个不同的协议


我怀疑第一个文件实际上是使用apache服务器加载的,但仅仅是打开文件?href=“2ndFile.html”之所以有效,是因为它使用了“相对url”。这使得浏览器使用与他从中获取第一个(当前)文件相同的协议和路径

文件:URL方案引用客户端计算机上的文件。
文件中没有主机名:
方案;您只需提供文件的路径。因此,本地计算机上的文件应该是
file:///~User/2ndFile.html
。注意三条斜线;URL的主机名部分为空,因此路径开头的斜杠紧跟在URL开头的双斜杠之后。您还需要扩展用户的路径<代码>~不会在
文件中展开:
URL。所以您需要
file:///home/User/2ndFile.html
(在大多数Unix上),
file:///Users/User/2ndFile.html
(在Mac OS X上)或
file:///C:/Users/User/2ndFile.html
(在Windows上)

出于安全原因,许多浏览器不允许从服务器加载的文件链接到本地文件。因此,您可能无法从通过HTTP加载的页面执行此操作;您可能只能从其他本地页面链接到
文件:
url。“文件://”url协议只能用于在本地计算机的文件系统中定位文件。由于此html代码由浏览器解释,“本地机器”是运行浏览器的机器


如果您得到文件未找到错误,我怀疑这是因为文件未找到。但是,这也可能是浏览器的安全限制。某些浏览器不允许您从非文件系统html页面引用文件系统文件。您可以尝试在运行浏览器的计算机上使用命令行中的文件路径,以确认这是一个浏览器限制,而不是一个合法的丢失文件。

我以前也遇到过类似问题,在我的情况下,该文件位于另一台计算机中 因此,我已将网络驱动器z映射到文件所在的文件夹位置 然后我在tomcat中创建了一个上下文
因此,在我的web项目中,我可以通过apache查找符号链接的上下文访问HTML文件,也可以通过具有符号链接的操作系统解决问题,或者在linux上设置库链接等

我的答案是专门针对Windows10的一种方法

因此,我的方法涉及将网络驱动器映射到U:/(例如,我使用g:/表示谷歌驱动器)

打开
cmd
并键入
hostname
(示例结果:
LAPTOP-G666P000
,您可以使用ip,但如果网络停止,使用静态主机名来识别您自己更有意义)

Windows\u键+E
右键单击“这台电脑”
>按
N
(它是映射网络驱动器,而不是添加网络位置)

如果右键单击桌面上的快捷方式,则需要按N键,然后按enter键

填写
U:
G:
Z:
或任何您想要的内容 示例地址:
\\LAPTOP-G666P000\c$\Users\username\

然后您可以像在问题中一样使用
本地文件


相关:您也可以将此方法用于FTP,并在同一网络上为不同的相对路径设置多个驱动器


关系2:我使用了
http://localhost/c$
etc之前,在一些WAMP/apache服务器上,您也可以使用
.htaccess
进行控制/安全,但我建议不要在实时/生产机器上使用,或者在任何其他symlink documentroot示例中,您可以在谷歌上搜索,除非我遗漏了什么,file://指向客户端计算机上的文件。。。因此,如果您试图获取服务器上的文件,您应该继续使用HTTP…第一个文件由客户端应用程序加载,我使用file://的原因是我正在尝试一些安全性方面的东西,看看第一个文件是否可以使用file://.Well (你说的那一点)没关系。但是如果使用文件协议,这与apache无关。Apache是http服务器。如何在Windows上使用相对路径而不是C://要使用相对路径,只需包含相对路径,而不包含任何
文件:
scheme或
/
。因此,如果您有一个文件
index.html
,并且希望引用同一目录中的
other_file.html
,您只需直接链接到
other_file.html
,而无需任何方案。@Brian则无法下载类似的本地文件file:///home/User/2ndFile.html ? 我想知道是否有其他选择?您是否检查了您提出的解决方案是否有效?如果没有,我建议你不要发布答案,因为它可能会误导他人。是的,很久以前就为我工作了。编辑我的评论以了解更多细节这应该有用
file://///ComputerNameOnNetwork/DriveLetter/index.html