【问题标题】:javascript avoid duplicate URLsjavascript避免重复的URL
【发布时间】:2012-01-19 19:51:12
【问题描述】:

如何在 javascript 中检查两个 URL 是否相同?

例如,我不想将这两个都存储在数据库中:

example.com/dogs/
example.com/dogs

或两者兼有:

www.example.com
example.com

或两者兼有:

http://example.com
https://example.com

...那么在 URL 中获取数据呢?我的数据库可能会变得非常混乱。

有没有一种方法可以将所有 URL 转换为某种标准形式,以便检查重复项变得更加简单?

谢谢大家!

【问题讨论】:

  • 这些都不一样。这些是您想要合并的唯一差异吗?
  • http://example.com 上的内容并不总是与https://example.com 上的相同。您的其他示例也是如此。请记住这一点。
  • 你打算用JS访问数据库吗?...
  • google 不这样做吗?他们的搜索结果中没有重复的网址。还是他们在声明重复 URL 之前检查页面内容并确保它们相同?
  • @cambraca 我正在使用HTML5 localstorage

标签: javascript string url url-rewriting uri


【解决方案1】:

Google 通过使用link rel="canonical" 解决了这个问题——这个过程被称为canonicalization

当然,您可以按照您的描述使用正则表达式简化网址,但“example.com”和“www.example.com”可能是不同的网站。

【讨论】:

    【解决方案2】:

    如果您只是想为网站存储基于域,我会这样做。

    var url = "http://www.xyzsite.com/mySite/?param=1"; // This is the url you want to process.
    
    var filter = [
        "http://",
        "https://",
        "www.",
    ];
    
    // Loops through array and removes the protocol and www. prefixes if present
    for (var i in filter) {
        url = url.replace(filter[i], "");
    }
    
    // Returns everything before the first / in the URL
    var cleanUrl = url.split("/")[0]; // cleanUrl should equal "xyzsite.com" now
    

    我可能会将它包装在一个函数中,这样它也可以很容易地运行多次。

    【讨论】:

    • 我希望子文件夹和子域也能正常工作。您的方法会将example.com/dogsexample.com/cats 都变成example.com。这不是我真正想要的。
    • 这适用于子域,但不适用于子文件夹。如果您想支持子文件夹,请不要执行 .split("/")[0] 部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2012-06-27
    • 2013-01-07
    相关资源
    最近更新 更多