27

我认为在 URI 中使用冒号是“非法的”。然后我看到 vimeo.com 正在使用类似的 URIhttp://www.vimeo.com/tag:sample.

  1. 您对在 URI 中使用冒号有何看法?
  2. 如何使我的 Apache 服务器使用“冒号”语法,因为现在它正在抛出“禁止访问!” URI 的第一段中有冒号时出错?
4

3 回答 3

36

URI 路径中允许使用冒号。但是在使用冒号编写相对 URI 路径时需要小心,因为这样使用是不允许的:

<a href="tag:sample">

在这种情况下tag,将被解释为 URI 的方案。相反,您需要像这样编写它:

<a href="./tag:sample">
于 2009-11-15T14:01:53.903 回答
11

还要注意Linux 和 Windows 上的 Apache 之间的区别。Windows 上的 Apache 不知何故不允许在 URL 的第一部分使用冒号。然而,Linux 对此没有任何问题。

于 2010-04-05T15:09:35.793 回答
11

URL 中是否允许使用冒号?

是的,除非它在相对路径引用的第一个路径段中

因此,例如,您可以拥有这样的 URL:

您通常可以将其用作绝对 URL 或一些相对变体:

<a href="https://en.wikipedia.org/wiki/Template:Welcome">Welcome Template</a>
<a href="/wiki/Template:Welcome">Welcome Template</a>
<a href="wiki/Template:Welcome">Welcome Template</a>

但这将是无效的:

<a href="Template:Welcome">Welcome Template</a>

因为这里的“模板”会被误认为是协议方案。您将不得不使用:

<a href="./Template:Welcome">Welcome Template</a>

使用来自层次结构中同一级别的页面的相对链接。

规格

请参阅 RFC 3986,第 3.3 节:

路径组件包含通常以分层形式组织的数据,这些数据与非分层查询组件(第 3.4 节)中的数据一起用于标识 URI 方案和命名权限(如果有)范围内的资源。路径以第一个问号 ("?") 或数字符号 ("#") 字符结束,或者以 URI 的结尾结束。

如果 URI 包含权限组件,则路径组件必须为空或以斜杠 ("/") 字符开头。如果 URI 不包含权限组件,则路径不能以两个斜杠字符(“//”)开头。 此外,URI 引用(第 4.1 节)可能是相对路径引用,在这种情况下,第一个路径段不能包含冒号(“:”)字符。 ABNF 需要五个单独的规则来消除这些情况的歧义,其中只有一个会匹配给定 URI 引用中的路径子字符串。我们使用通用术语“路径组件”来描述解析器匹配到这些规则之一的 URI 子字符串。[重点补充]

使用冒号的示例 URL:

于 2017-04-07T16:58:57.070 回答