从MediaWiki操作URL中删除index.php

从MediaWiki操作URL中删除index.php,mediawiki,Mediawiki,好的,这就是如何从URL中隐藏index.php?title=bit,但我想为所有操作类型链接隐藏它,类似于扩展的工作方式(它不在我的站点上,我不知道如何修复它)。我没有访问.htaccess的权限,并且正在考虑通过向common.js页面添加一些javascript,或者通过修改ShortLinks扩展来实现,但是这些钩子上的文档不是很好,我尝试的任何东西都没有帮助。基本上,您需要为每个要使用短URL的操作添加一个条目 例如,如果您希望页面Foobar的普通视图URL为/wiki/Foobar

好的,这就是如何从URL中隐藏index.php?title=bit,但我想为所有操作类型链接隐藏它,类似于扩展的工作方式(它不在我的站点上,我不知道如何修复它)。我没有访问.htaccess的权限,并且正在考虑通过向common.js页面添加一些javascript,或者通过修改ShortLinks扩展来实现,但是这些钩子上的文档不是很好,我尝试的任何东西都没有帮助。

基本上,您需要为每个要使用短URL的操作添加一个条目

例如,如果您希望页面
Foobar
的普通视图URL为
/wiki/Foobar
,而编辑和历史URL为,比如说,
/wiki/edit/Foobar
/wiki/history/Foobar
,您应该在LocalSettings.php中添加以下行:

$wgacterpath='/wiki/$1';
$wgactionpath['edit']='/wiki/edit/$1';
$wgactionpath['history']='/wiki/history/$1';
当然,您还需要配置web服务器,将对这些短URL的任何请求重写回MediaWiki可以理解的内容,例如在Apache上使用mod_rewrite。我上面链接的文档页面有一些有用的例子


一般来说,您可以使用或钩子以任意方式转换MediaWiki生成的URL。(这两个钩子之间的主要区别是GetLocalURL钩子也被称为interwiki URL。)这些钩子是从调用的,您可能想看看它们是如何工作的

例如,下面是如何将不同的URL转换为格式
/wiki/diff/revA/revB/Page\u name

函数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”;
}
返回true;
}
$wgHooks['GetLocalURL::Internal'][]='prettyDiffURLs';
(警告:我相信这段代码应该可以工作,但我还没有测试过!)

我的最终答案(感谢上面的答案)是:

函数pretty_diff($title,&$url,$query)
{
if(preg_match('/diff=(\w+)&oldid=(\w+/”,$query,$matches))
{
$dbkey=wfUrlencode($title->getPrefixedDBkey());
$url=“/wiki/$dbkey?$matches[0]”;
}
返回true;
}
$wgHooks['GetLocalURL::Internal'][]=“pretty_diff';

但我最终用javascript函数替换了它,以覆盖更多的链接

,这太棒了,非常感谢:D是否有类似的方法使最近的更改提要上的差异url保持相同?是否有任何方法将节号(以及可能的节标题)添加到编辑url的末尾?那是真的cool@FallingBullets:您可以通过编写自定义挂钩来完成所有这些(以及更多!);请参见上面的编辑。好的,wgHook工作正常,但缺少“比较所选修订”按钮和其他diff/oldid/newid/etc查询组合。谢谢你的帮助,很抱歉没有尽快回复你,我没有注意到/收到通知。有这么多的URL被推送到
/w/index.php?
,有没有更好的方法连接到它?将名称空间重定向到
/$NS/$title
也很酷,例如
/category/things