可以将句号(.)作为URL路径的一部分吗?

46
4个回答

61

我没看到RFC1738中禁止在URL中使用句点(.)的地方。以下是一些摘自RFC1738的内容:

hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
uchar          = unreserved | escape
unreserved     = alpha | digit | safe | extra
safe           = "$" | "-" | "_" | "." | "+"

所以你的问题的答案是:是的,http://www.example.com/module.php/lib/lib.php 是一个有效的 URL。


18

正如其他人所指出的,URL中允许使用句点,但要小心。如果在URL路径的一部分中使用了单个或双重句点,则浏览器将其视为路径中的更改,您可能无法获得所需的行为。

例如:

  • www.example.com/foo/./ 重定向到 www.example.com/foo/
  • www.example.com/foo/../ 重定向到 www.example.com/

而以下内容不会重定向:

  • www.example.com/foo/bar.biz/
  • www.example.com/foo/..biz/
  • www.example.com/foo/biz../

你能举个浏览器的例子,它可以进行这种解释并自动重写吗?我知道某些网络服务器会用这些重定向来响应HTTP请求,但不知道有哪些浏览器会自己重写这些URL。 - Brandon Rhodes
打开 Chrome 浏览器,在开发工具的网络标签中导航到 http://www.example.com/foo/../。如果您在网络标签中查看,您会注意到实际请求是直接发送到 http://www.example.com/,没有任何服务器重定向。 - speedplane

11

允许使用句点。请参见本文档中的“2.3未保留字符”部分: https://www.rfc-editor.org/rfc/rfc3986

“URI允许使用但没有预留目的的字符称为未保留字符。这些包括大写和小写字母,十进制数字,连字符,句点,下划线和波浪号。”


2

在URL中使用句点是没有问题的。如果您查看提供的链接中的语法构成,可以看到通过'safe'组提到了句点,并且该组是通过uchar包括的。

忽略我的回答,Adams更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接