足够的URL替换

时间:2009-09-10 10:55:32

标签: url url-rewriting

快一点。

我正在使用mod重写并且已经有大多数替换:

  • 空格 = _
  • æ = ae
  • Æ = ae

等等。

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

由于

3 个答案:

答案 0 :(得分:2)

下划线被视为单词字符,因此foo_bar是一个单词,而不是两个单词。但连字符不被视为单词字符,因此foo-bar是两个单词。

因此,您应该在任何地方使用hypen -分隔两个部分和下划线_,无论您想要连接两个部分。如果/用于分隔,我更喜欢炒作-

答案 1 :(得分:1)

  
      
  • Æ= ae
  •   

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

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

在浏览器中显示为:

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

可以粘贴到地址栏中。

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

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

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

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

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

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

如果您愿意,可以使用连字符而不是下划线,无论哪个更漂亮。搜索引擎应该没问题。

对其他答案的评论:

  

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

在这种情况下,你不能做任何不可恢复的角色。您不能将'Æ'更改为'ae',空格必须编码为'%20'并且斜杠编码为'%2F'。这将导致稍微丑陋的URL,'%2F'将为您提供Apache和IIS上的部署问题。

如果您需要仅关注标题,则需要在已处理的slug上添加(UNIQUE索引)列以进行查找,如上所述。但请注意,您无法重命名/更正页面标题,因为它会更改slug,从而破坏URL。

解决这个问题的常用方法是在slug之外加入一个数字ID(例如,参见SO如何做)。您还可以301重定向slug名称错误的地方以获得最佳SEO。

答案 2 :(得分:0)

我会使用破折号 - 因为谷歌将这样的词分开用于搜索引擎优化目的,甚至是下划线_因为这些都是可读性的完美。