routes - 搜索页面的漂亮 URL

标签 routes

我真的很喜欢拥有“漂亮”的网址(例如 /Products/Edit/1 而不是 /products.aspx?productID=1),但我现在处于不知道如何为允许您通过大量变量进行搜索的页面执行此操作。

例如,假设您有一个页面,可让用户搜索具有特定名称且靠近特定地址的特定类型的所有产品。你会用很长的“漂亮”网址来做到这一点

/Products/Search/Type/{producttype}/Name/{name}/Address/{address}

或者只是使用 url 参数

/Products/Search?productType={producttype}&name={name}&address={address}

最佳答案

这个问题主要是关于 URL 设计,只是附带涉及重写。将 URL 设计为 cool 后,有很多方法可以让它们工作,包括在服务器级别重写或使用基于 URL 调度的 Web 框架(我认为现在大多数现代 Web 框架都这样做)。

情人眼里出西施,但我确实同意你的观点,很多搜索网址都很丑陋。是什么让他们如此?我认为使 URL 变得丑陋的主要原因是 URL 中的缺陷,它没有添加语义,而是实现细节的结果,例如 (.aspx) 或其他扩展名。我的规则是,如果 URL 返回 (X)HTML,则它不应该有扩展名,否则应该有。

在搜索的情况下,事实是标准搜索语法确实添加了含义:它表明该页面是一个搜索,它表明参数已命名且可重新排序。丑陋主要来自 ?&= 字符,但实际上您所做的任何其他操作都是用更具吸引力的字符(如 |-/)替换这些相同的字符,但代价是使 URL 对于任何希望解析它的软件来说都是不透明的例如蜘蛛、缓存代理服务器或其他东西。

因此,请仔细考虑是否不使用标准语法,并确保您有充分的理由这样做。我认为,如果您的参数具有自然顺序并且必须全部定义以使搜索有意义并且是紧凑的,您可以将其推送到URL中。例如,在博客 URL 中您可能有:

/weblog/entries/2008
/weblog/entries/2008/11
/weblog/entries/2008/11/22

用于分别定义 2008 年、2008 年 11 月和 2008 年 11 月 22 日的条目的搜索。您的 URL 应该是唯一且明确的;有时人们会输入/-/来表示缺少的搜索参数,我认为这非常紧凑。但是,我会避免将可能很长的参数(例如自由格式的文本查询)推送到 URL 中。 /weblog/entries/having/here%20is%20some%20freeform%20text%20blah%20blah 并不比使用查询语法更具吸引力。

如果您打算使用标准查询语法,那么选择有意义的参数名称​​可能会在一定程度上提高吸引力。 products/search?description="blah"虽然更长,但可能比 products/search?q="blah"更好。我认为,此时此刻, yield 递减。

关于routes - 搜索页面的漂亮 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/128796/

相关文章:

routes - 通过 angularjs 中的路由进行重定向

azure - 如何正确配置Azure应用程序网关重写URL规则?

php - 如何检查哪个@route触发了Symfony2中的Controller::Action?

angular - 如何在Angular程序中将未知路线重定向到家庭路线?

c# - 如何让语言永久改变?

ruby-on-rails - Rails 路由重定向上的 URI::InvalidURIError

Ajax 调用 Laravel 路由

ruby-on-rails - Rails 3.1 基于子域的 Controller 路由

ios - 在我的 iPhone 中显示当前位置

c# - 与 url 不同的操作名称