http://www.ietf.org/rfc/rfc2396.txt
によると、

<scheme>://<authority><path>?<query>

path = [ abs_path | opaque_part ]
path_segments = segment *( "/" segment )
segment = *pchar *( ";" param )
param = *pchar
pchar = unreserved | escaped | ":" | "@" | "&" | "=" | "+" | "$" | ","


ということらしい。

つまり、; の後が parameter、? の後がqueryとなる。
しかも、parameterはsegment毎に複数かける。ということは、

http://example.com/dir1;a=1/dir2;b=2;c=3/index.html;d=4?f=5

なんてのもありってことだな。
ちゃんと解釈してくれるサーバーやフレームワークなんてなさそうだけど…。

実際問題、parameterなんて使うのはJavaのjsessionidぐらいしか見たことないんだが、
こいつのせいでいつも手間が増えるんだよなぁ。