根据Section 3.3, Path Component of RFC2396 - Uniform Resource Identifiers,
该路径可以由一系列由单个斜杠“/”字符分隔的路径段组成。在路径段中,字符“/”,“;”,“=”和“?”保留。每个路径段可以包括一系列参数,由分号“;”表示。字符。这些参数对于解析相对引用并不重要。
但是,我从未在最终版本以外的任何细分中看到过带有查询参数的网址。所以,我不确定我是否正确阅读。
http://www.url.com/segment1?seg1param1=val1/page.html?pageparam1=val2
是否为有效网址?
答案 0 :(得分:10)
RFC所指的是这样的:
http://www.example.com/foo/bar;param=value/baz.html
可以将其解释为/foo/bar/baz.html
的路径param=value
到bar
段。没有使用问号。
请注意,{23}已废弃RFC 2396,它省略了特定于段的参数的规范,而忽略了一般说明,即实现可以(并且确实)执行不同的操作来嵌入特定于段的参数:
除了分层路径中的点段之外,路径段也是如此 通用语法认为不透明。 URI生成应用程序 经常使用段中允许的保留字符来分隔 特定于方案或特定于引用程序处理程序的子组件。对于 例如,分号(“;”)和等于(“=”)保留字符是 通常用于分隔适用的参数和参数值 那个部分。逗号(“,”)保留字符通常用于 类似的目的。例如,一个URI生成器可能使用一个段 例如“name; v = 1.1”表示对1.1版本的引用 “name”,而另一个可能使用诸如“name,1.1”之类的段 表示相同。参数类型可以由特定于方案定义 语义,但在大多数情况下,参数的语法是特定的 URI的解除引用算法的实现。
答案 1 :(得分:1)
当您查看下面的语法时,会写出:
path = [ abs_path | opaque_part ] path_segments = segment *( "/" segment ) segment = *pchar *( ";" param ) param = *pchar pchar = unreserved | escaped | ":" | "@" | "&" | "=" | "+" | "$" | ","
一个段由pchar和param组成,param本身就是一个pchar。 当我们继续阅读时,绝对没有“?” pchar字符组件中的字符。所以参数不能有任何“?”,并且不能有“?”分段。
所以我同意Edward Thomson的回答,他说“?”只划分查询段,不能在路径中使用。
答案 2 :(得分:0)
根据我对RFC 2396的解读,没有。 ?
是保留字符,仅用于分隔查询段。 1}}在路径或查询段中不允许使用。{/ p>
在您的示例中,第一个?
标记了查询段的开头。第二个?
位于查询细分中,不允许使用。
答案 3 :(得分:0)
我相信你可以做到这一点,大多数网络服务器都会处理它,但我不相信你会得到你期望的结果。那就是pageparam1 = val2不会评估。
如果你想要这样的参数,你可以随时使用#符号(现在很多基于javascript的GUI都可以)。