URL中是否允许使用冒号?

Ema*_*sev 19 apache standards uri colon

我认为在URI中使用冒号是"非法的".然后我看到vimeo.com正在使用像http://www.vimeo.com/tag:sample.

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

Gum*_*mbo 29

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

<a href="tag:sample">
Run Code Online (Sandbox Code Playgroud)

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

<a href="./tag:sample">
Run Code Online (Sandbox Code Playgroud)


SQL*_*ter 10

另请注意Apache在Linux和Windows上的区别.Windows上的Apache不允许在URL的第一部分使用冒号.但是,Linux对此没有任何问题.


rsp*_*rsp 9

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>
Run Code Online (Sandbox Code Playgroud)

但这将是无效的:

<a href="Template:Welcome">Welcome Template</a>
Run Code Online (Sandbox Code Playgroud)

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

<a href="./Template:Welcome">Welcome Template</a>
Run Code Online (Sandbox Code Playgroud)

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

规格

请参阅 RFC 3986,第 3.3 节:

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

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

使用冒号的示例 URL: