【问题标题】:Adequate replacement for / in URLs充分替换 URL 中的 /
【发布时间】:2009-09-10 10:55:31
【问题描述】:

快速一个。

我正在使用 mod rewrite 并且有大多数替换:

  • 空白空间 = _
  • æ = ae
  • Æ = ae

等等。

/ 的自然替换字符是什么?

谢谢

【问题讨论】:

    标签: url url-rewriting


    【解决方案1】:

    下划线被认为是一个单词字符,所以foo_bar是一个单词而不是两个单词。但是连字符不被认为是一个单词字符,所以foo-bar是两个单词。

    因此,您应该在要分隔两个部分的地方使用连字符 -,在要连接两个部分的地方使用下划线 _。对于用于分隔的/,我更喜欢连字符-

    【讨论】:

    • 问题是 hypen (-) 像这样使用:“大球 - 超级运动”。所以它会与它发生冲突。
    • @Cudos:​​所以你要把它转换成Big_ball_-_supersports?为什么不加入Big-ball-supersports
    • 因为我使用php在我的数据库中搜索名称。所以每个字符都必须转换回原始字符,否则将找不到匹配项。
    • @Cudos:​​为什么不将该 URL 部分存储在一个额外的列中?至少大多数人都是这样做的。
    • 嗯.. 有趣。没有想过这个。看看我是否可以重新编写现有代码。谢谢。
    【解决方案2】:
    • Æ = ae

    您不一定需要这样做。您可以将非 ASCII Unicode 字符作为 UTF-8 编码字节放在 URL 中。所以:

    http://en.wikipedia.org/wiki/%C3%86
    

    在浏览器中显示为:

    http://en.wikipedia.org/wiki/Æ
    

    两者都可以粘贴到地址栏中。

    空格和斜杠可以编码为 %20 和 %2F。但是,这些表单在浏览器中仍然显示为百分比,因为它们是保留字符。所以它们看起来并不那么漂亮。 %2F 的另一个问题是基于 CGI 的传统脚本环境无法读取它们,而 Apache 默认情况下会故意阻止它们以阻止此类脚本混淆并留下安全漏洞。

    所以我通过完全删除来制作标题段:

    # % ' ( ) ? [ ] (U+00AD soft hyphen)
    

    以及任何控制字符(U+0000 到 U+001F,U+00A0 和 U+007F 到 U+00BF)。然后替换任何运行:

    " $ & * + , / : ; < = > @ \ ^ (U+0020 space) (U+000A newline)
    

    带有一个下划线。这消除了 %xx 序列出现在 URL 中的必要性。 (对于 Unicode 字符,仍然会有 %xx 序列,但用户不会看到它们。)

    如果您愿意,可以使用连字符代替下划线,以更漂亮的为准。搜索引擎应该都可以。

    eta 重新评论其他答案:

    因为我使用 php 在我的数据库中搜索名称。所以每个字符都必须转换回原始字符,否则将找不到匹配项。

    但是,在这种情况下,您无法对角色做任何无法恢复的事情。您不能将“Æ”更改为“ae”,空格必须编码为“%20”,斜杠必须编码为“%2F”。这将导致 URL 稍微难看,并且“%2F”会给您在 Apache 和 IIS 上的部署问题。

    如果您只需要键入标题,则需要在已处理的 slug 上添加一个(唯一索引)列以进行查找,如上所述。但是请注意,您不能重命名/更正页面标题,因为它会更改 slug,破坏 URL。

    解决此问题的常用方法是在 slug 之外包含一个数字 ID(例如,请参阅 SO 是如何做到的)。您还可以在 slug 名称错误的地方进行 301 重定向以获得最佳 SEO。

    【讨论】:

      【解决方案3】:

      我会使用破折号 - 因为 Google 会出于 SEO 的目的将这样的单词分开,或者甚至使用下划线 _ 来分隔,因为它们都具有可读性。

      【讨论】:

      • 问题是 hypen (-) 像这样使用:“大球 - 超级运动”。所以它会与它发生冲突。
      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多