MediaWiki是否有任何API可以使用其标题重定向到页面?
我正在编写一个MediaWiki扩展程序,如果可用,它会重定向到某个页面。谁能告诉我怎么做?
答案 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将显示。