MediaWiki永久重定向:何时?

时间:2016-07-24 23:10:58

标签: mediawiki hhvm

前段时间我设置了一个MediaWiki安装,其网址很短,如http://(mydomain)/Page_Title

我确定它有效,即使页面被称为 / etc http://(mydomain)//etc正确打开。

现在我发现前一段时间停止了工作。相反, HHVM 3.14.3和 nginx 1.10.1下的MW 1.26和1.27为http://(mydomain)//etc提供了循环永久重定向(代码301)以响应{{ 1}}甚至http://(mydomain)//etc。重定向不是由 nginx 发出,而是由 HHVM 发出,因此由 MediaWiki 发出。

我不知道我是否在 MediaWiki 配置中破坏了某些内容(它很大,所以我不会提供它)或者 MediaWiki中引入了一些新错误< / em>或 HHVM

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

1 个答案:

答案 0 :(得分:0)

返回永久重定向的大多数地方都是新的(自 MediaWiki 1.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;
 };

网址已“规范化”:在include/WebRequest.php的第792-799行中:有几个前导斜线替换为一个;然后MediaWiki::tryNormaliseRedirect ()看到“规范化”的网址与原始网址不相同,并提供301。

这看起来像WebRequest::getGlobalRequestURL()中的一个相当古老的错误,仅在MediaWiki 1.26.3中被取消隐藏;所以我提交了它:https://phabricator.wikimedia.org/T141444