Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
依靠URL中的尾随斜杠进行路由是否安全?_Url_Url Routing - Fatal编程技术网

依靠URL中的尾随斜杠进行路由是否安全?

依靠URL中的尾随斜杠进行路由是否安全?,url,url-routing,Url,Url Routing,我正在构建一个站点,其中包含产品,每个产品都属于一个或多个类别,可以嵌套在父类别中。我希望有SEO友好的URL,如下所示: mysite.com/category/ mysite.com/category/product mysite.com/category/sub-category/ mysite.com/category/sub-category/product 我的问题是:依靠尾部斜杠的存在来区分案例2和案例3是否安全?当检测到尾随斜杠时,与没有尾随斜杠的特定产品页面相比,我是否可以始终

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

  • mysite.com/category/
  • mysite.com/category/product
  • mysite.com/category/sub-category/
  • mysite.com/category/sub-category/product
  • 我的问题是:依靠尾部斜杠的存在来区分案例2和案例3是否安全?当检测到尾随斜杠时,与没有尾随斜杠的特定产品页面相比,我是否可以始终假定用户需要类别索引


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

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

    为了解决您的问题,为什么不设立一个特殊的子类别“all”,而不是
    “mysite.com/category/product”是否有“mysite.com/category/all/product”?

    决不认为用户会在任何与URL相关的最坏情况下做任何事情


    除非您准备在代码中执行重定向,否则假设URI以斜杠结尾或不以斜杠结尾的几率相等。确保您的代码健壮性的唯一方法,因此不必担心此类问题。

    对我来说,
    http://product/
    http://product
    将代表两种完全不同的资源。这会让人困惑,而且会减少URL的数量,因为很难判断尾随斜杠何时应该出现

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

    为减少假阴性的发生率所作的大量努力是必要的 对于网络蜘蛛来说,这通常是划算的。因此,他们实施 URI比较中更具攻击性的技术。例如 如果他们观察到一个URI,例如

    http://example.com/data

    重定向到仅在尾部斜杠上不同的URI

    http://example.com/data/

    在未来,他们可能会将两者视为等价物。(……)


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

  • mysite.com/category/
  • mysite.com/category/product.html
  • mysite.com/category/sub-category/
  • mysite.com/category/sub-category/product.html

  • 这个问题假设在URL后面加一个斜杠会创建一个指向不同资源的URL。这是错误的;URL的语义是它们都引用相同的资源。在基本URL中出现尾随斜杠仅仅是使用该基本URL解释相对URL的方式。

    为什么不通过强制使用其中一种符号(带尾随斜杠或不带尾随斜杠)来明确URL?@Gumbo之所以产生歧义,是因为我无法判断
    /category/abc
    是否是对类别或产品的请求。我想我可以通过用斜杠区分产品和类别请求来解决这个问题。没错,我没有考虑到这一点。然而,用户很少会输入这些URL;目标受众非常不懂技术。我仍然主要关注SEO和浏览器功能。我也在考虑place holder子类别,尽管我计划使用“products”:
    mysite.com/category/products/product\u name
    。你能举出一些参考资料吗?@meagar请看,添加一个尾随斜杠应该无关紧要(但不幸的是,这并不能保证做到这一点,因为这个问题表明:服务器可能会以不同的方式对待它们)。请注意,我确实同意,我只是想要更具体的东西。我知道至少有一个专业(实际上是最专业的)基于Rails的web服务,该服务根据尾部的
    /
    :Basecamp进行不同的路由。添加尾部的
    /
    ,您的URL将突然变为404。在RFC 3986中,请参阅。