MediaWiki的永久重定向:何时



不久前,我用http://(mydomain)/Page_Title等非常短的URL安装了一个MediaWiki。

我确保它有效,即使页面被调用/etc/em>:http://(mydomain)//etc正确打开。

现在我发现这在一段时间前就不起作用了。相反,HHVM3.14.3和nginx11.10.1下的MW 1.26和1.27为http://(mydomain)//etc甚至http://(mydomain)/w/index.php?title=/etc提供了到http://(mydomain)//etc的循环永久重定向(代码301)。重定向不是由nginx发出的,而是由HHVM以及MediaWiki发布的。

我不知道我是否破坏了MediaWiki配置中的某些东西(它很大,所以我不会提供它),或者在MediaWikiHHVM中引入了一些新的错误。

我的问题是:MediaWiki核心代码中可以用301代码回复简单页面视图的位置(文件或类)在哪里,所以我可以查看哪些配置设置会影响这种行为?

返回永久重定向的大多数位置都在新的(由于MediaWiki1.26.3)文件include/MediaWiki.php中:第230、286、341、353行。

在我的案例中,我之前添加到LocalSettings.php中处理超短URL的黑客(见下文)导致了无休止的重定向。无论如何,重定向将是:http[s]://(mydomain)//etchttp[s]://etc,这是完全错误的,但不是循环的。

黑客攻击:

// This is for titles starting with /: [[/etc]] → "//etc" → "/.//etc".
// Set merge_slashes off in nginx config!
$wgHooks ['GetLocalURL'] [] = function ($title, &$url, $query) {
    if (mb_substr ($title->getText (), 0, 1) === '/'
     && $title->getNamespace () === 0
     && !MWNamespace::hasSubpages (0 /* the same as $title->getNamespace () but faster */)
    ) {
        $url = '/.' . $url;
    }
    return true;
 };

URL被"规范化":在include/WebRequest.php的792-799行中:几个前导斜杠被替换为一个;则CCD_ 11看到"规范化"的URL不等于原始URL。

这看起来像是WebRequest::getGlobalRequestURL()中一个相当古老的bug,它只在MediaWiki 1.26.3中被揭露;所以我提交了:https://phabricator.wikimedia.org/T141444.

最新更新