为了路由目的,依赖URL中的尾部斜杠是否安全?

时间:2010-03-04 19:08:20

标签: url url-routing

我正在构建一个包含产品的网站,每个产品都属于一个或多个类别,这些产品可以嵌套在父类别中。我想拥有SEO友好的URL,如下所示:

  1. mysite.com/category /
  2. mysite.com/category/product
  3. mysite.com/category/sub-category /
  4. mysite.com/category/sub-category/product
  5. 我的问题是:依赖于斜杠的存在来区分案例2和3是否安全?我能否始终假设用户在检测到尾部斜杠时需要类别索引,而不是特定产品的页面没有斜杠?

    我并不担心实现这个URI方案;我已经用PHP和mod_rewrite做了很多。我只是想知道是否有人知道对这种URL路由的任何异议。浏览器从地址栏中剥离/添加尾随URL,或搜索引擎抓取此类网站时是否存在任何已知问题?任何SEO问题或其他我可能遇到的绊脚石?

5 个答案:

答案 0 :(得分:5)

除了您提到的其他陷阱想法之外,用户可能会自己更改URL(通过键入产品或类别)并添加/删除尾随“/".

要解决您的问题,为什么不使用特殊的子类别“ all ”而不是 “mysite.com/category/product”有“mysite.com/category/all/product”?

答案 1 :(得分:5)

对我而言,http://product/http://product代表两种完全不同的资源似乎非常不自然。这很令人困惑,它使您的URL减少hackable,因为很难判断何时应该存在尾随斜杠。

此外,在RFC 3986统一资源标识符(URI):通用语法中,第6.2.4节中有关于基于协议的规范化的说明,讨论了关于您网站的非人类访问者的特殊情况,例如搜索引擎和网络蜘蛛:

  

减少假阴性发生率的大量努力是   通常对网络蜘蛛来说具有成本效益。因此,他们实施   在URI比较中更具侵略性的技术。例如,   如果他们观察到诸如

之类的URI      

http://example.com/data

     

重定向到仅在尾部斜杠

中不同的URI      

http://example.com/data/

     他们可能会认为这两者在未来是等价的。 (...)

答案 2 :(得分:3)

区分的一种方法是确保产品页面具有扩展名,但不包括类别或子类别页面。那就是:

  1. mysite.com/category/
  2. mysite.com/category/product.html
  3. mysite.com/category/sub-category/
  4. mysite.com/category/sub-category/product.html
  5. 这使得它毫不含糊。

答案 3 :(得分:1)

永远不要假设用户会做任何事情,但在任何与网址相关的最坏情况下。

除非您准备在代码中进行重定向,否则假设您具有以斜杠或无斜线结尾的URI的相等机会。只有这样才能确保你的代码是健壮的,因此不必担心这类问题。

答案 4 :(得分:0)

此问题假定向URL添加尾部斜杠会创建引用不同资源的URL。这是错的; URL的语义是它们都引用相同的资源。 base URL中存在尾部斜杠仅changes如何使用该基本URL解释相对URL。