基本上,您需要添加一个条目$wgActionPaths //www.mediawiki.org/wiki/Manual%3a%24wgActionPaths对于您想要使用短 URL 的每个操作。
例如,如果您想要页面的普通查看 URLFoobar
to be /wiki/Foobar
,编辑和历史 URL 为:/wiki/edit/Foobar
and /wiki/history/Foobar
,您可以将以下行添加到 LocalSettings.php 中:
$wgArticlePath = '/wiki/$1';
$wgActionPaths['edit'] = '/wiki/edit/$1';
$wgActionPaths['history'] = '/wiki/history/$1';
当然,您还需要配置您的网络服务器,将对这些短 URL 的任何请求重写回 MediaWiki 可以理解的内容,例如在 Apache 上使用 mod_rewrite。我上面链接的文档页面有一些有用的示例。
更一般地说,您可以使用任意方式转换 MediaWiki 生成的 URL获取本地URL //www.mediawiki.org/wiki/Manual%3aHooks/GetLocalURL or GetLocalURL::内部 //www.mediawiki.org/wiki/Manual%3aHooks/GetLocalURL%3a%3aInternal钩。 (这两个钩子之间的主要区别在于 GetLocalURL 钩子也为跨维基 URL 调用。)这些钩子是从标题::GetLocalURL() https://github.com/wikimedia/mediawiki-core/blob/edbd8ea6b32d8859ef8e1f77ba6d0e43afaea06e/includes/Title.php#L1637,您可能想看看它们是如何工作的。
例如,以下是如何将 diff URL 转换为以下格式/wiki/diff/revA/revB/Page_name
:
function prettyDiffURLs( $title, &$url, $query ) {
if ( preg_match( '/^diff=(\w+)&oldid=(\w+)$/', $query, $matches ) ) {
$dbkey = wfUrlencode( $title->getPrefixedDBkey() );
$url = "/wiki/diff/$matches[1]/$matches[2]/$dbkey";
}
return true;
}
$wgHooks['GetLocalURL::Internal'][] = 'prettyDiffURLs';
(警告:我相信这段代码应该可以工作,但我还没有测试过!)