2014-05-14 2 views
0

내 사이트의 기본 도메인을 www 하위 도메인에 입력 한 사용자를 자동 리디렉션하고 싶습니다. 프리 블레이즈, 여기에 내가 철 라우터와 함께이 작업을 수행하기 위해 사용 된 코드는 다음과 같습니다 Iron Router가 설치된 Meteor에서 Naked Domain을 www로 리디렉션

Router.onBeforeAction(function() { 
    var rootDomainRegex = new RegExp(
     '^https:\\/\\/mysite.com', 
     'ig' 
    ); 
    if (window && rootDomainRegex.test(window.location.href)) { 
     this.stop(); 
     window.location = window.location.href.replace(
      rootDomainRegex, 
      'https://www.mysite.com' 
     ); 
    } 
}; 

내가 0.8.0를 유성 업그레이드 및 철 라우터의 블레이즈 호환 버전의 경우 작동이 중지. (나는 this.stop()을 pause()로 바꿨지 만 도움이되지 않았다.) 이제 콘솔 오류없이 알몸 도메인으로 이동할 때 페이지가 멈추게된다.

누구나 알몸 도메인에서 www로 사용자를 리디렉션 할 수있는 안정적인 블레이즈 호환 방법이 있습니까? (또는 어쩌면 이것은 애플 리케이션 레벨에 있어서는 안된다.)

내 블레이즈 코드는 다음과 같다. (이 기능은 현재 작동하지 않는 코드입니다.)

Router.onBeforeAction(function(pause) { 

    var rootDomainRegex = new RegExp(
     '^https:\\/\\/mysite.com', 
     'ig' 
    ); 
    rootDomainRegex.lastIndex = 0; 
    if (window && rootDomainRegex.test(window.location.href)) { 
     window.location = window.location.href.replace(
      rootDomainRegex, 
      'https://www.mysite.com' 
     ); 
     pause(); 
    } 

}); 

편집 추가 정보의 조금과 : 난 그냥 기본 도메인으로, Router.onBeforeAction()에 전달하는 기능은 단순히 전혀 실행되지 않는 것을 발견했습니다 .

+0

NGINX 리버스 프록시 뒤에 Meteor를 실행하면 Nginx에서 도메인 리디렉션을 수행하는 것이 매우 쉽습니다. – Paul

답변

0

this.stop을 pause로 바꾼 곳에서 업데이트 된 코드를 붙여 넣었어야합니다.

코드에 아무런 문제가 발생하지 않는다고 생각합니다. 코드가 작동하고 멈춤을 호출하지 않아도 리디렉션되어야합니다. 그래서 아마 당신의 정규식이 일치하지 않기 때문입니다.

if 문 앞에 console.log(rootDomainRegex.test(window.location.href))으로 전화를 걸어 보았는데 true!이 (가) 반환되었습니다. 그렇게했다면 그 원인이 regex.test를 처음 호출 할 때 true를 반환하는 것과 일치하지만 정규 표현식의 lastIndex도 증가합니다. g 플래그 때문에 두 번째로 test을 호출하면 해당 lastIndex와 그것은 실패하고 결코 window.location 부분을 실행하지 않습니다.

HTH, 정확히 일치하지 않는 코드를 붙여 넣으십시오.

+0

감사합니다. 방금 현재 라이브 코드를 추가하기 위해 편집했습니다. 정규식은 다른 곳에서는'test()'되지 않지만 안전을 위해서'lastIndex' 리셋을 추가했습니다. 그것은 비록 도움이되지 않았다. – kareem