重定向到MediaWiki中的Wiki页面

时间:2012-02-15 14:52:43

标签: mediawiki

MediaWiki是否有任何API可以使用其标题重定向到页面?

我正在编写一个MediaWiki扩展程序,如果可用,它会重定向到某个页面。谁能告诉我怎么做?

2 个答案:

答案 0 :(得分:6)

从MediaWiki发出HTTP redirect的推荐方法是在OutputPage实例上调用redirect()方法(无论您传递的是哪个实例,还是全局实例{{1} })。此方法将URL作为参数,并可选择使用HTTP状态代码(默认为302)。

(您也可以直接调用PHP header()函数,但使用OutputPage方法不太可能干扰可能还想设置特殊HTTP标头的其他代码。)

如果您拥有的是Title对象,则可以通过调用$wgOut来获取相应的网址。如果您只是拥有页面的名称,请将其传递给getFullURL()(或适当的Title类中的其他静态工厂方法之一)以获取它的Title对象,如下所示:

Title::newFromText()

请注意,调用$title = Title::newFromText( $pageName ); if ( $title ) { global $wgOut; $wgOut->redirect( $title->getFullURL() ); } else { // we've got a bogus page name, deal with it somehow } 使中止请求,甚至立即发送响应代码 - 它只是设置一个内部标志,导致OutputPage在{时发出相应的HTTP标头调用{1}}方法。根据您在扩展程序中使用的确切挂钩,您可能需要设置其返回值(和/或任何特定于挂钩的标志),以告知MediaWiki无需呈现任何实际内容页面。


聚苯乙烯。虽然上面的示例使用已弃用的$wgOut全局变量来获取OutputPage实例,但在现代MediaWiki代码中,您应该从当前RequestContext获取它。许多MediaWiki类实现了IContextSource接口,包括SpecialPage,Skin,Title,WebRequest以及OutputPage本身,因此您可以从任何这些接口获取RequestContext。 (当然,如果你已经拥有一个OutputPage对象,你应该直接使用它。)

答案 1 :(得分:-2)

只要你不离开你的wiki使用

#REDIRECT [[foo]]

而不是此页面,页面foo将显示。