相对于根目录的链接?

202

有没有一种方法可以让页面上的所有链接都相对于根目录?

例如,在www.example.com/fruits/apples/apple.html页面上,我可以添加一个链接:

<a href="fruits/index.html">Back to Fruits List</a>

这个链接将会指向 www.example.com/fruits/apples/fruits/index.html 还是 www.example.com/fruits/index.html?如果是前者,有没有办法让它指向后者?

7个回答

357

根相对路径以斜杠字符/开头,看起来类似于<a href="/directoryInRoot/fileName.html">link text</a>

你发布的链接:<a href="fruits/index.html">Back to Fruits List</a>链接到一个名为fruits的目录中的HTML文件,该目录与包含此链接的HTML页面位于同一目录中。

要将其更改为根相对URL,请将其更改为:

<a href="/fruits/index.html">Back to Fruits List</a>

针对问题的回答,已在评论中被编辑:

那么做 / 将使其相对于 www.example.com,有没有一种方法可以指定根目录,例如在 www.example.com/fruits/apples/apple.html 中我想要根目录是 www.example.com/fruits ?

是的,在 hrefsrc 属性中加上 /,将使路径相对于根目录。例如,假设 html 页面在 www.example.com/fruits/apples.html,则 href="/vegetables/carrots.html"a 将链接到页面 www.example.com/vegetables/carrots.html

base 标签 元素允许您为该页面指定基本 URI(尽管必须将 base 标签添加到每个需要使用特定基础的页面中,在此我将引用 W3 的示例):

例如,给出以下 BASE 声明和 A 声明:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
 <HEAD>
   <TITLE>Our Products</TITLE>
   <BASE href="http://www.aviary.com/products/intro.html">
 </HEAD>

 <BODY>
   <P>Have you seen our <A href="../cages/birds.gif">Bird Cages</A>?
 </BODY>
</HTML>

相对路径 "../cages/birds.gif" 将解析为:

http://www.aviary.com/cages/birds.gif

本例引用自:http://www.w3.org/TR/html401/struct/links.html#h-12.4

建议阅读:


3
那么执行 / 将使其相对于 www.example.com,是否有一种方法可以指定根目录,例如如果我想要在 www.example.com/fruits/apples/apple.html 中将根目录设置为 www.example.com/fruits,该怎么办? - Ali
3
有没有一种动态查找的方法?类似于.NET中的波浪符号(~)吗?如果在每个环境中都有不同的文件夹名称,会发生什么? - Kremena Lalova

24

使用

<a href="/fruits/index.html">Back to Fruits List</a>
或者
<a href="../index.html">Back to Fruits List</a>

2
在使用CSS文件时,../path可以正常工作,但/path对我来说无法正常工作。 (该文件位于/目录下,引用了/DifferentDirectory) - Clay Nichols

6
如果您正在从ASP.NET应用程序服务器端创建URL,并将您的网站部署到您网站的虚拟目录(例如app2),即http://www.yourwebsite.com/app2/,那么只需插入
<base href="~/" />

在title标签之后。

所以每当您使用根目录相对路径,例如

<a href="/Accounts/Login"/> 

此处的文本将解析为 "http://www.yourwebsite.com/app2/Accounts/Login"

这样,您就可以始终相对绝对地指向您的文件;)

对我来说,这是最灵活的解决方案。


4
你的答案根本行不通。在 ASP.NET 解决方案中,“波浪号斜杠”是在服务器端起作用的。但这个问题并不涉及服务器端 ASP.NET 解决方案。 - Anders Marzi Tornblad
1
我理解你的理论,但它确实可行(无论是在实践还是理论上)。 当生成HTML时,服务器会将“tilde slash”替换为应用程序的根目录。你先试过了吗? - A-Majeed
当然我试过了。Web服务器不会用根目录替换波浪线斜杠,只有ASP.NET应用程序才会这样做。在其他环境中,没有“应用程序”这样的概念。 - Anders Marzi Tornblad
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Anders Marzi Tornblad
1
当我从JavaScript渲染链接时,这对我起了作用。 - Balaji Birajdar

4
相对路径概述(适用于 href、src 等):
/file_Or_FolderName          Root directory
./file_Or_FolderName         Current directory
../file_Or_FolderName        Previous directory (One level up)
../../file_Or_FolderName     Previous of previous directory (Two levels up)
../../../file_Or_FolderName  Just like above - Three levels up 

例子:

www.example.com
    ├── apple.html
    └── FolderA
        ├── fileA.html
        └── FolderB
            ├── fileB.html
            └── FolderC
                ├── fileC.html
                └── FolderD       <------ Suppose you're here (current directory)
                    ├── fileD.html
                    └── FolderE
                        └── fileE.html

以下展示如何使用相对路径(适用于href,src等)访问不同级别的文件。

fileD.html                 - same level access(or)
./fileD.html               - same level
./FolderE/fileE.html       - 1 level Down
../fileC.html              - 1 level Up
../../fileB.html           - 2 levels Up
../../../fileA.html        - 3 levels Up
../../../../apple.html     - 4 levels Up (or)
/apple.html                - 4 levels Up but direcly using root /

非常好地通过层次结构进行了很好的解释。 - Sangram Nandkhile

3
<a href="/fruits/index.html">Back to Fruits List</a>

2
为图像标签提供一个URL,该URL位于根目录下的images/目录中。
`logo.png`

你应该使用以/开头的src URL,如下所示:
<img src="/images/logo.png"/>

这段代码可以在任何目录下正常运行,即使你在branches/europe/about.php,标志也可以显示出来。

-3
使用此代码"./"作为服务器上的根目录,因为它对我有效。
<a href="./fruits/index.html">Back to Fruits List</a>

但是当您在本地计算机上时,请使用以下代码 "../" 作为根相对路径

<a href="../fruits/index.html">Back to Fruits List</a>

"./" 是相对于当前路径的,而不是根目录。 - Quentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接