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

背景:

使用星号,我可以提供这些美观且用户友好的(或您的看法?)URL:


example.com/some/folder/search-phrase*
表示在/ some / folder /中搜索名称以“ search-phrase”开头的页面。
example.com/some/**/*search-phrase*
表示在任何位置搜索任何带有“ search-phrase”的页面
example.com/some/folder/*
表示在/ some / folder /中列出所有页面(而不是显示/ some / folder / index页面)。


评论

cf.类似的问题

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

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

#1 楼

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

当前UTF-8或ASCII都不能表示Asterix。
他不过是标准浏览器地址栏中的污点。
我怀疑他会非常喜欢它。而且他有很多朋友。
这很奇怪。

在URL中使用星号
在URL中使用星号(*)(是的,我知道您一直以来的意思)也不是一个好主意。因为它是保留字符,所以在其他任何地方都没有使用。即使您的URL方案对您来说对用户友好,也很少有人会考虑尝试它,并且由于URL中通配符的含义难以辨认,因此可能会产生无法预测的结果。 (在阅读您的描述之前,我无法说出所有示例的含义。)
不仅如此,而且可能会有更多语义/有意义的方式来进行描述。例如,您可以附加查询字符串,并使用'find'和'where'变量告诉您​​的方法在哪里查找内容:
/some/folder/中查找以'search短语'开头的页面:
example.com/some/folder/?find=search-phrase&where=start
在任何位置查找带有“搜索短语”的页面:
example.com/some/?find=search-phrase&where=anywhere
要显示所有页面,我将使用称为“ all”的单独方法来代替查询字符串或通配符语法:
example.com/some/folder/all
查询字符串语法比星号更常见-例如,下次进行Google搜索时,请查看地址栏中的内容-而且编码也可能会更容易。
最后,如果您可能不喜欢查询字符串的外观,可以在方法名称前添加一个名为“搜索”的名称,然后将接下来的两个块用作“查找”和“位置”变量。例如代替:
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.comhttp://web.archive.org/web/20040214050058/http://www.google.com/
第一个示例返回google.com的所有日期的存档列表,而不只是某个日期的页面(第二个示例)。有趣的是,我无法在此处链接到实时页面,因为当出现在URL中时,Stack Exchange网站将*字符编码为%2a,这导致archive.org中的404错误。 (也许是另一个原因,不要在URL中使用星号。)
我仍然认为它不如'all'清晰,但是,如果您正在寻找其他网站在其URL中采用星号的示例,那是第一个我见过的一个。

评论


。 Asterix:什么!您是否认为我的意思是“星号”?

– KajMagnus
2011年6月25日上午9:01

。 Asterix:哦,这就是为什么我没有在StackOverflow或网站管理员上找到任何相关页面的原因。现在,我在S.O.上找到2个相关页面:URL中允许使用星号,并且URL可以带有星号吗? - 谢谢 :-)

– KajMagnus
2011年6月25日9:02



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

– KajMagnus
2011年6月25日9:05



(如果有人想知道对Asterix的引用:我拼错了Asterisk,我以为是Asterix :-)

– KajMagnus
2011年6月25日在16:22

#2 楼

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

其他保留字符
保留使用星号(“ *”,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的路径组件中使用sub-delims。 -这是否表示可以以我的方式使用*(以及@,:,+,,),还可以吗?

– KajMagnus
2011年6月25日8:03

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

– KajMagnus
2011年6月25日8:06



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

– KajMagnus
2011年6月25日上午9:09

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

– Alex
2011-6-25 23:42

我不知道我是否同意该一般性答复。学习新事物的一种方法是,做一些您不知道它如何工作的事情,然后您将学习并找出答案。如果人们通常只做他们确切知道自己的工作方式的事情,那我们的未来会如何? (这是我要发布的Alpha之前的版本,因此它不用于生产:-))-仍然感谢您的信息和链接:-)

– KajMagnus
2011-6-27在7:38