apache URL中是否允许使用冒号?

sshcrbum  于 2023-01-21  发布在  Apache
关注(0)|答案(3)|浏览(542)

我认为在URI中使用冒号是“非法的”,然后我看到vimeo.com正在使用http://www.vimeo.com/tag:sample.这样的URI
1.您对URI中冒号的用法有何看法?
1.如何让Apache服务器使用“冒号”语法,因为当URI的第一段中有冒号时,它会抛出“Access forbidden!”错误?

6tdlim6h

6tdlim6h1#

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

<a href="tag:sample">

在这种情况下,tag将被解释为URI的方案,而需要如下编写:

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

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节:

  • https://www.rfc-editor.org/rfc/rfc3986#section-3.3

路径组件包含数据,通常以层次形式组织,与非层次查询组件(3.4节)中的数据一起,用于标识URI方案和命名权限(如果有的话)范围内的资源。路径以第一个问号("?")或数字符号("#")字符结束,或以URI的结尾结束。
如果一个URI包含一个权限组件,那么路径组件必须是空的或者以斜杠("/")字符开头。如果一个URI不包含权限组件,那么路径不能以两个斜杠字符("//")开头。**另外,一个URI引用(4.1节)可以是一个相对路径引用,在这种情况下,第一个路径段不能包含冒号(":")字符。**ABNF需要五个独立的规则来消除这些情况的歧义,其中只有一个将匹配给定URI引用中的路径子字符串。我们使用通用术语"路径组件"来描述解析器与这些规则之一匹配的URI子字符串。
使用冒号的URL示例:

dkqlctbz

dkqlctbz3#

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

相关问题