我认为在URI中使用冒号是“非法的”,然后我看到vimeo.com正在使用http://www.vimeo.com/tag:sample.这样的URI1.您对URI中冒号的用法有何看法?1.如何让Apache服务器使用“冒号”语法,因为当URI的第一段中有冒号时,它会抛出“Access forbidden!”错误?
http://www.vimeo.com/tag:sample.
6tdlim6h1#
URI路径中允许使用冒号,但在编写带冒号的相对URI路径时需要小心,因为不允许这样使用冒号:
<a href="tag:sample">
在这种情况下,tag将被解释为URI的方案,而需要如下编写:
tag
<a href="./tag:sample">
zi8p0yeb2#
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示例:
dkqlctbz3#
还要注意Linux上的Apache和Windows上的Apache之间的区别。Windows上的Apache不知何故不允许在URL的第一部分使用冒号。然而Linux对此没有问题。
3条答案
按热度按时间6tdlim6h1#
URI路径中允许使用冒号,但在编写带冒号的相对URI路径时需要小心,因为不允许这样使用冒号:
在这种情况下,
tag
将被解释为URI的方案,而需要如下编写:zi8p0yeb2#
URL中是否允许使用冒号?
是,除非它位于相对路径引用的第一个路径段中
例如,您可以使用如下URL:
您通常可以将其用作绝对URL或一些相对变体:
但这将是无效的:
因为这里的"模板"会被误认为是协议方案,您必须使用:
以使用来自层次结构中同一级别上的页面的相对链接。
规格
参见RFC 3986第3.3节:
路径组件包含数据,通常以层次形式组织,与非层次查询组件(3.4节)中的数据一起,用于标识URI方案和命名权限(如果有的话)范围内的资源。路径以第一个问号("?")或数字符号("#")字符结束,或以URI的结尾结束。
如果一个URI包含一个权限组件,那么路径组件必须是空的或者以斜杠("/")字符开头。如果一个URI不包含权限组件,那么路径不能以两个斜杠字符("//")开头。**另外,一个URI引用(4.1节)可以是一个相对路径引用,在这种情况下,第一个路径段不能包含冒号(":")字符。**ABNF需要五个独立的规则来消除这些情况的歧义,其中只有一个将匹配给定URI引用中的路径子字符串。我们使用通用术语"路径组件"来描述解析器与这些规则之一匹配的URI子字符串。
使用冒号的URL示例:
dkqlctbz3#
还要注意Linux上的Apache和Windows上的Apache之间的区别。Windows上的Apache不知何故不允许在URL的第一部分使用冒号。然而Linux对此没有问题。