2016-07-24 4 views
0

얼마 전에 http://(mydomain)/Page_Title과 같은 매우 짧은 URL로 MediaWiki 설치를 설정했습니다.MediaWiki의 영구 리디렉션 : 언제?

페이지가 / : http://(mydomain)//etc으로 올바르게 열렸음에도 불구하고 제대로 작동하는지 확인했습니다.

이제 얼마 전부터이 작업이 중단되었음을 알았습니다. 대신, MW 1.26 미만 및 1.27과 3.14.3 HHVM Nginx의 1.10.1 http://(mydomain)//etc 심지어 http://(mydomain)/w/index.php?title=/etc 대한 답변 http://(mydomain)//etc에 원형 영구 리디렉션 (부호 (301))를 제공한다. 리디렉션은하지 미디어 위키의 nginx이 아니라 HHVM에 의해 때문에 에 의해 발행된다. 내가 미디어 위키 구성에서 뭔가를 파손 여부를 모르는

는 (그것은 큰, 그래서 나는 그것을 제공하지 않습니다) 또는 새로운 버그가 미디어 위키 또는 HHVM에 도입되었다.

내 질문은 : 장소 (파일 또는 클래스)가 인 MediaWiki 간단한 코드보기로 301 코드로 회신 할 수있는 핵심 코드가 어디에 있습니까?이 동작에 영향을주는 구성 설정을 볼 수 있습니까?

+0

리디렉션의 대상이 무엇인지 더 흥미로울 것이므로 전체 헤더 또는 적어도 'Location :'헤더 만 제공하십시오.) Btw .: 거의 모든 코드가 301 리디렉션을 내보낼 수 있지만 (OutputPage :: redirect()는 기본적으로 302 리다이렉션을 내 보낸다) 간단한 검색만으로 도움이된다. MediaWiki 코어에서 301 개의 리디렉션이있는 곳이 2 곳 밖에없는 것 같습니다. – Florian

+0

... 둘 다 관련이없는 것 같습니다 (https://github.com/wikimedia/mediawiki/blob/bd619f02525f27beba1b17d6dc1ab23a3b0e12cc/includes/MediaWiki. php # L234 -> 외부 링크, 외부 Interwiki) 및 https://github.com/wikimedia/mediawiki/blob/8f9643d8f9e12b0d0bc592b1af5313ffaed12ba9/includes/specials/SpecialContributions.php#L176 -> RSS/Atom 피드 리디렉션). – Florian

+0

리디렉션이 일어날 수있는 곳이 많지만, 대부분의 범용 리디렉션 코드는'MediaWiki :: performRequest()'에 있습니다. 어쨌든'OutputPage :: redirect()'에 대한 로깅 호출을 추가하는 것이 가장 좋은 방법 일 것입니다. 편리한 호출자 로깅을 위해'wfDebugLog()'와'wfGetAllCallers()'를 보라. – Tgr

답변

0

영구 리디렉션을 반환 장소의 대부분은 새로운에 (이후 미디어 위키 1.26.3) 파일 include/MediaWiki.php : 라인 230, 286, 341, 내 경우

(353), 해킹 이전에 I 매우 짧은 URL (아래 참조)을 처리하기 위해 LocalSettings.php에 추가되어 끝없는 리디렉션에 기여했습니다. 그러나 리디렉션의 방향은 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 년 : 몇 가지 주요가로 교체된다 슬래시; MediaWiki::tryNormaliseRedirect()은 "정규화 된"URL이 원래의 URL과 같지 않아서 301이라는 것을 보았습니다.

WebRequest::getGlobalRequestURL()의 다소 오래된 버그인데, 이것은 MediaWiki 1.26.3에서만 마스크되었습니다. 그래서 나는 그것을 신청했다 : https://phabricator.wikimedia.org/T141444.