重定向到MediaWiki中的Wiki页面

Ram*_*esh 3 mediawiki

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

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

Ilm*_*nen 6

从MediaWiki 发出HTTP重定向的推荐方法是redirect()OutputPage实例上调用该方法(无论您传递的是哪个实例,还是全局实例$wgOut).此方法将URL和HTTP状态代码(默认值为302)作为参数.

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

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

$title = Title::newFromText( $pageName );

if ( $title ) {
    global $wgOut;
    $wgOut->redirect( $title->getFullURL() );
}
else {
    // we've got a bogus page name, deal with it somehow
}
Run Code Online (Sandbox Code Playgroud)

请注意,调用redirect()不会中止请求,甚至不会立即发送响应代码 - 它只是设置一个内部标志,导致OutputPage在output()调用方法时发出相应的HTTP标头.根据您在扩展中使用的确切挂钩,您可能需要设置其返回值(和/或任何特定于挂钩的标志),以告知MediaWiki不需要为页面呈现任何实际内容.


PS.虽然上面的例子中使用了过时$wgOut的全局变量来获得OutputPage例如,在现代链接到MediaWiki代码,你应该从目前获得它的RequestContext代替.许多MediaWiki类实现了IContextSource接口,包括SpecialPage,Skin,Title,WebRequest以及OutputPage本身,因此您可以从任何这些接口获取RequestContext.(当然,如果你已经有了一个OutputPage对象,你应该直接使用它.)