从MediaWiki操作URL中删除index.php

时间:2014-04-03 17:19:22

标签: mediawiki

好吧所以它的fairly well documented如何从url隐藏index.php?title = bit,但我想要的是为所有动作类型链接隐藏它,类似于扩展{{3}的方式应该工作(它不在我的网站上,我不知道如何解决它)。我无法访问.htaccess并且正在考虑通过向common.js页面添加一些javascript来实现它,或者通过修改ShortLinks扩展来实现它,但是这些钩子上的文档并不是很好,而且我都是试过没有帮助。

2 个答案:

答案 0 :(得分:3)

基本上,您需要为要使用短网址的每个操作添加$wgActionPaths条目。

例如,如果您希望页面Foobar的普通视图网址为/wiki/Foobar,则编辑和历史记录网址为/wiki/edit/Foobar和{{1} },您将以下行添加到LocalSettings.php:

/wiki/history/Foobar

当然,您还需要配置您的Web服务器,将对这些短URL的任何请求重写为MediaWiki将理解的内容,例如:在Apache上使用mod_rewrite。我上面链接的文档页面有一些有用的例子。


更一般地说,您可以使用GetLocalURLGetLocalURL::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函数替换它可能涵盖更多链接