我可以使用MediaWiki将所有链接设为小写,并使用连字符而不是下划线作为单词分隔符吗?

时间:2010-03-19 15:05:38

标签: mediawiki lowercase hyphen permalinks

我可以将MediaWiki链接设为小写,并使用连字符而不是下划线作为单词分隔符吗?

排序WordPress或其他维基CMSes

4 个答案:

答案 0 :(得分:2)

至少有一种方法可以在主命名空间中执行此操作,因此用户编辑的页面具有全小写/破折号分隔的URL。

首先,您可以手动将页面强制为全小写且以虚线分隔。最初的问题是你的内部链接现在必须有破折号,这消除了内部链接的标准普通语言风格,并使它们几乎无法使用:

For examples of this see [[making-mediawiki-links-lowercase|making mediawiki links lowercase]].

制作新的wikilink不再添加一对双方括号;必须重写整个链接文本(并且可选地使用管道重命名为可读)。

但是有一种方法可以重写链接上的href。首先,对LocalSettings.php进行两处更改:

$wgCapitalLinks = False; # like mentioned above: make MW not capitalize the page titles
$wgHooks['LinkEnd'][] = "seoUrls"; # add a hook to rewrite the links
function seoUrls($dummy, Title $target, array $options, &$html, array &$attribs, &$ret) {
    $attribs = str_replace("_", "-", $attribs);
    return True;
}

这会重写内部链接的href以使用破折号而不是下划线,同时保持锚的其余部分不受影响。

然后使用CSS隐藏(或修改模板文件以删除)具有用户内容的那些页面上的常规标题。 CSS将类似于:

.ns-0.action-view #firstHeading, /* main */
.ns-14.action-view #firstHeading /* categories */
{
    display: none
}

想要保留没有任何用户定义内容的页面标题,例如编辑视图和特殊页面。我发现只需要隐藏名称空间0(主要)和14(类别)。

最后,不是Mediawiki提供的标题,而是通过在页面内容顶部添加h1来为页面添加标题。

您可能希望将所有带下划线的网址重写为短划线:

RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]

问题

  • 不存在的页面检测并不完全准确,因为它搜索的页面有空格而不是破折号。但是,只要您删除了标题中包含空格的所有旧页面,这就不会有问题。
  • 由于首字母现在区分大小写,因此内部链接在句子的第一个单词时需要重命名。
  • 目录和内联编辑部分链接的行为方式不同;由于h1,它们现在在每个页面上被触发。

优点

  • 您可以根据需要制作标题。我喜欢使用类别页面来获取内容,但不喜欢“Category:Blah”的标题。
  • 您还可以使用mediawiki-illegal或非ASCII字符使用页面标题,而无需使用URL。

答案 1 :(得分:1)

可以使MediaWiki使用破折号而不是下划线来指示空格。 wikiHow做到了。但它需要对源代码进行大量编辑,通常不建议这样做。此外,无法保证没有错误。

答案 2 :(得分:0)

您似乎可以使用this configuration value调整链接案例设置。我无法找到关于单词分隔符的任何内容。祝你好运。

答案 3 :(得分:0)

要使页面名称为小写,请使用:Template:Lowercase。将{{Lowercase}}添加到任何页面以更改其显示方式。

无论如何,链接可以使用小写 - 链接的第一个字母可以是大写或小写 - 它将始终链接到正确的页面。