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

我是否可以使用MediaWiki将所有链接设置为小写,并使用连字符而不是下划线作为单词分隔符?,mediawiki,lowercase,hyphen,permalinks,Mediawiki,Lowercase,Hyphen,Permalinks,我可以在MediaWiki中使用小写链接并使用连字符而不是下划线作为单词分隔符吗 类似于WordPress或其他wiki的功能。看起来您可以使用调整链接大小写设置。我找不到关于单词分隔符的任何信息。祝你好运。可以让MediaWiki使用破折号而不是下划线来表示空白。是的。但它需要对源代码进行多次编辑,这通常是不建议的。此外,也不能保证没有bug。要使页面名称小写,请使用:。将{{Lowercase}}添加到任何页面以更改其显示方式 无论如何,链接都可以使用小写-链接的第一个字母可以是大写或小写-

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


类似于WordPress或其他wiki的功能。

看起来您可以使用调整链接大小写设置。我找不到关于单词分隔符的任何信息。祝你好运。

可以让MediaWiki使用破折号而不是下划线来表示空白。是的。但它需要对源代码进行多次编辑,这通常是不建议的。此外,也不能保证没有bug。

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


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

主命名空间中有一种方法可以做到这一点,至少用户编辑的页面具有所有小写/破折号分隔的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来为页面指定标题

您可能还希望将所有带有下划线的URL重写为破折号:

RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]
问题
  • 不存在的页面检测并不完全准确,因为它搜索的页面有空格,而不是破折号。但是,只要您删除了标题中有空格的所有旧页面,这就不会成为问题
  • 因为首字母现在区分大小写,所以当它们是句子的第一个单词时,内部链接需要重命名
  • 目录和内联编辑部分链接的作用不同;由于h1,它们现在在每个页面上都被触发
优势
  • 你可以做任何你想要的标题。我喜欢使用分类页面来包含内容,但不喜欢“分类:废话”的标题
  • 您还可以让页面标题使用mediawiki非法或非ASCII字符,而不必修改URL

这只能在某种程度上解决他的问题,因为我认为这只能让小写字母作为第一个字符,而不是强制。