我可以在URL中使用星号吗?


13

有什么原因我不应该*在URL中使用星号()?

背景:

使用星号,我可以提供以下美观且用户友好的(或您认为呢?)URL:

  • example.com/some/folder/search-phrase*
    表示搜索位于/ some / folder /中以“ search-phrase”开头的名称的页面

  • example.com/some/**/*search-phrase*
    表示在名称中任何位置搜索带有“搜索短语”的任何页面

  • example.com/some/folder/*
    表示列出/ some / folder /中的所有页面(而不是显示/ some / folder / index页面)



1
这是另一个类似的SO问题:URL可以带有星号吗?。我没有找到它们,因为我用Asterix:-/拼写了Asterisk,直到被纠正为止(请参阅下面的Asterix答复:-))。
KajMagnus 2011年

@KajMagnus我今天第一次在其网址中使用星号找到了一个网站。请参阅下面的更新后的答案。
尼克,

Answers:


16

关于在URL中使用Asterix

在您的URL中使用Asterix可能不是一个好主意,主要是因为:

  1. UTF-8或ASCII当前都不能表示Asterix。
  2. 他不过是标准浏览器地址栏中的污点。
  3. 我怀疑他会不会很喜欢。而且他有一些很大的朋友。
  4. 真奇怪

关于在URL中使用星号

在URL中使用星号(*)(是的,我一直都知道这是您的意思)也不是一个好主意。因为它是保留字符,所以在其他任何地方都没有使用。即使您的URL方案对您来说对用户友好,也很少有人会考虑尝试它,并且由于URL中通配符的含义难以辨认,因此可能会产生无法预测的结果。(在阅读您的描述之前,我无法说出您所有示例的含义。)

不仅如此,而且可能会有更多语义/有意义的方式来完成您描述的事情。例如,您可以追加查询字符串并使用'find'和'where'变量来告诉您的方法在哪里找到什么:

在以下位置查找以“搜索词组”开头的页面/some/folder/

example.com/some/folder/?find=search-phrase&where=start

在任何地方查找带有“搜索词组”的页面:

example.com/some/?find=search-phrase&where=anywhere

为了显示所有页面,我将使用称为“ all”的单独方法,而不是查询字符串或通配符语法:

example.com/some/folder/all

查询字符串语法是远远比星号更常见的-看看在接下来的时间你的地址栏中,你做一个谷歌搜索,例如-这将可能是更容易的代码了。

最后,如果您不喜欢查询字符串的外观,则可以在方法名称前添加一个名为“ search”的名称,然后将接下来的两个块用作“ find”和“ where”变量。例如:

example.com/some/folder/?find=search-phrase&where=start

你可以有:

example.com/some/folder/search/search-phrase/start

然后,您只需要在URL路径中检查“ search”关键字,并使用接下来的两个路径段作为变量来触发您的搜索方法。


更新:我今天在URL中找到了第一个星号。新的archive.org界面正按照您的描述(作为搜索功能的一部分)完全使用它来代替“ all”关键字。例如:

http://wayback.archive.org/web/*/http://google.com

代替

http://web.archive.org/web/20040214050058/http://www.google.com/

第一个示例从google.com的所有日期返回已归档的列表,而不仅仅是某个日期的页面(第二个示例)。有趣的是,我无法在此处链接到实时页面,因为Stack Exchange网站会在*字符%2a出现在URL中时对其进行编码,这会导致archive.org中显示404。(也许另一个原因是不要在URL中使用星号。)

我仍然认为它还不如“全部”那么清楚,但是,如果您正在寻找其他网站在其URL中采用星号的示例,那是我所看到的第一个。


Wster Asterix:什么!您是否认为我的意思是“星号”?
KajMagnus 2011年

Wrt Asterix:这就是为什么我在StackOverflow或Webmasters上找不到任何相关页面的原因。现在我发现SO 2个的相关网页:在URL允许星号,并可以在URL有星号? -感谢:-)
KajMagnus

感谢您提供有关最终用户可能如何理解星号的信息。现在,我很可能会更喜欢查询字符串。
KajMagnus 2011年

(以防有人怀疑对Asterix的引用:我拼错了Asterisk,我以为是Asterix :
KajMagnus

11

是的,因为它是保留字符。

其他保留字符

保留星号(“ *”,ASCII 2A十六进制)和感叹号(“!”,ASCII 21十六进制),因为它们在特定方案中具有特殊意义。

从这里:http : //www.w3.org/Addressing/URL/4_URI_Recommentations.html

编辑:

第2节有关字符的内容已经重写,以说明保留了哪些字符,何时保留字符以及为什么保留它们,即使通用语法没有将它们用作分隔符。通常不安全解码的标记字符,包括感叹号(“!”),星号(“ *”),单引号(“'”)以及右括号和右括号(“(”和“)”)为了明确保留和未保留之间的区别,并已将它们移到保留集,并希望回答方案设计者最常见的问题。

从这里:http : //labs.apache.org/webarch/uri/rfc/rfc3986.html#modifications


嗯,*是保留字符,是的。但这是一个子定界符,当我阅读URI规范时,在我看来,可以以特定于应用程序的方式在URI的path组件中使用sub-delims 。-这难道不意味着它的确定以使用*(也如@:+,在我做的方式)?
KajMagnus

我对短语“ 保留使用,因为在特定方案中具有特殊意义 ”感到困惑。我可以不定义自己的应用程序专用方案吗?对于sub-delims,Web应用程序是否可以以Web应用程序特定的方式使用它们?
KajMagnus

对于它的价值,这里有人说Wikipedia在URL中允许使用星号,而其他人则说可以:URL可以有一个星号吗?
KajMagnus 2011年

您询问是否应该使用它,而不是在技术上是否可行,并且通常的想法是,除非您确切地知道自己在做什么,否则不要使用它。
亚历克斯

我不知道我是否同意该一般性答复。学习新事物的一种方法是,做一些您不知道它如何工作的事情,然后您将学习并找出答案。如果人们通常只做他们确切知道他们如何工作的事情,我们的未来会如何?(这是我要发布的pre-alpha版本,所以它不用于生产:-))-仍然感谢您提供的信息和链接:-)
KajMagnus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.