前段时间我设置了一个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代码回复到简单的页面视图,因此我可以查看哪些配置设置会影响此行为?
答案 0 :(得分:0)
返回永久重定向的大多数地方都是新的(自 MediaWiki 1.26.3)文件include/MediaWiki.php
:第230,286,341,353行。
就我而言,我之前添加到LocalSettings.php
以处理超短URL(见下文)的黑客行为促成了无限重定向。没有它,重定向应该是:http[s]://(mydomain)//etc
→http[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。