好吧所以它的fairly well documented如何从url隐藏index.php?title = bit,但我想要的是为所有动作类型链接隐藏它,类似于扩展{{3}的方式应该工作(它不在我的网站上,我不知道如何解决它)。我无法访问.htaccess并且正在考虑通过向common.js页面添加一些javascript来实现它,或者通过修改ShortLinks扩展来实现它,但是这些钩子上的文档并不是很好,而且我都是试过没有帮助。
答案 0 :(得分:3)
基本上,您需要为要使用短网址的每个操作添加$wgActionPaths
条目。
例如,如果您希望页面Foobar
的普通视图网址为/wiki/Foobar
,则编辑和历史记录网址为/wiki/edit/Foobar
和{{1} },您将以下行添加到LocalSettings.php:
/wiki/history/Foobar
当然,您还需要配置您的Web服务器,将对这些短URL的任何请求重写为MediaWiki将理解的内容,例如:在Apache上使用mod_rewrite。我上面链接的文档页面有一些有用的例子。
更一般地说,您可以使用GetLocalURL或GetLocalURL::Internal挂钩以任意方式转换MediaWiki生成的网址。 (两个钩子之间的主要区别在于,还会为interwiki URL调用GetLocalURL钩子。)这些钩子是从Title::GetLocalURL()调用的,您可能需要查看它们以了解它们是如何工作的。
例如,以下是将diff网址转换为格式$wgArticlePath = '/wiki/$1';
$wgActionPaths['edit'] = '/wiki/edit/$1';
$wgActionPaths['history'] = '/wiki/history/$1';
:
/wiki/diff/revA/revB/Page_name
(警告:我相信这段代码应该可行,但我还没有测试过!)
答案 1 :(得分:0)
我的最终答案(感谢上述答案)是:
function pretty_diff($title, &$url, $query)
{
if ( preg_match('/diff=(\w+)&oldid=(\w+)/', $query, $matches))
{
$dbkey = wfUrlencode($title->getPrefixedDBkey());
$url = "/wiki/$dbkey?$matches[0]";
}
return true;
}
$wgHooks['GetLocalURL::Internal'][] = 'pretty_diff';
但我最终用javascript函数替换它可能涵盖更多链接