URL中是否允许使用冒号?

时间:2009-11-15 13:52:35

标签: apache standards uri colon

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

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

3 个答案:

答案 0 :(得分:25)

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

<a href="tag:sample">

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

<a href="./tag:sample">

答案 1 :(得分:10)

另请注意the difference between Apache on Linux and Windows。 Windows上的Apache不允许在URL的第一部分使用冒号。但是Linux没有问题。

答案 2 :(得分:2)

  

网址中是否允许使用冒号?

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

例如,您可以拥有这样的网址:

您可以将其正常用作绝对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子串      解析器与这些规则之一匹配。 [强调补充]

使用冒号的示例网址: