2012-11-29 3 views
1

두 언어 (히브리어 및 영어)로 된 WordPress 사이트가 있으며 브라우저 언어에 따라 리디렉션해야합니다. 두 언어 모두에서 콘텐츠를 만들려면 qTranslate 플러그인을 사용하고 있습니다. 이 플러그인도 리디렉션 기능을 가지고 있지만 리디렉션은 홈페이지에만 생성되므로 내부 페이지뿐만 아니라 홈페이지에서도 리디렉션이 필요합니다.URL 리디렉션이 제대로 작동하지 않습니다. http://domain.com/domain.com/

다른 개발자가 리디렉션을 생성하기 위해이 코드를 작성했지만 어떤 이유로 재밌는 리디렉션을 만듭니다. 히브리어로 언어를 전환 한 후 사이트를 떠나 직접 http://domain.com/en/에 들어가려고하면 http://domain.com/domain.com/ (영어로 전환 할 때 발생하지 않음)으로 리디렉션됩니다.

히브리어의 리다이렉션을 만드는 "헤더 (위치 :)"를 가지고 놀았지만 작동 방법을 알아 내지 못했습니다. 상대 경로 대신 전체 경로를 사용하거나 "/"사이에 $_SERVER['SERVER_NAME']$_SERVER['REQUEST_URI']이지만 재귀 URL 또는 두 번"/ "(http://domain.com// 및 내부 페이지 http://domain.com//page)의 URL이 있습니다.

는 URL 구조이다

  • 영어

히브리어

  • domain.com/en/ domain.com/ 대한 다음 파라미터의 언어를 전환 할 때 $ LANG = EN 또는 $ lang = 그는 추가되고 있습니다.

    희망이 있으니 이해해 주셔서 감사합니다.

    header("Location: http://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}"); 
    

    URL을, 특히 위치 헤더 사람들이하는을 포함해야 시도 대신

    header('Location: '.$_SERVER['SERVER_NAME'].'/'.$_SERVER['REQUEST_URI']);  
    

    <?php 
    if (!isset($_COOKIE["uln"])) : 
    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 
    setcookie('uln', $lang, time()+86400*365, '/', '.domain.com'); // cookie stored for a year 
    $_COOKIE['uln'] = $lang; 
    endif; 
    
    //if lang=(value) is not empty 
    
    if(isset($_GET['lang'])) { 
    $lang = $_GET['lang']; 
    
    setcookie('uln', $lang, time()-1, '/', '.domain.com'); //this unsets the cookie for random language selection 
    
    //set the cookie "uln" again with the selected language. 
    setcookie('uln', $lang, time()+86400*365, '/', '.domain.com'); // cookie stored for a year 
    $_COOKIE['uln'] = $lang; 
    } 
    
    
    
         if(($_COOKIE["uln"]) == "en") { 
         $matched = strncmp("/en/", $_SERVER['REDIRECT_URL'], 3);        
         if ($matched !== 0) :  
         header('Location: /en'.$_SERVER['REQUEST_URI']);   
         endif; 
        } elseif(($_COOKIE["uln"]) == "he") { 
         $matched = strncmp("/en/", $_SERVER['REDIRECT_URL'], 3);        
         if ($matched === 0) :  
         header('Location: '.$_SERVER['SERVER_NAME'].'/'.$_SERVER['REQUEST_URI']);  
         endif; 
        } 
    
    ?> 
    
  • 답변

    2

    :

    는 리디렉션을 담당하는 코드 프로토콜 및 도메인 이름. 위치 헤더의 상대 URL은 HTTP RFC에 위배됩니다.

    프로토콜을 생략하면 의도하지 않게 절대 URL 대신 상대 URL을 지정하게됩니다.

    편집 : REQUEST_URI에는 이미 접두사가 하나만 포함되어 있으므로 /이라는 접두어가 붙습니다.

    +0

    네, 감사합니다. 나는 그것을 시도했다. // 서브 라이브러리/en /이있는 곳의 URL이 // 생성됩니다. htaccess 파일에 다시 쓰기 규칙을 추가하여 "/"를 두 번 제거했지만 임시 해결책입니다. 여분의 해결 방법없이 제대로 작동하는 것이 좋습니다. – User24578

    +0

    연결에 포함 된 '/'이 필요하지 않을 수 있습니다.'header ("Location : http : // {$ _SERVER [ 'SERVER_NAME']} {$ _SERVER [ 'REQUEST_URI']}");'. 이러한 종류의 일은 컬 또는 브라우저 디버그 도구를 사용하여 HTTP 응답을 직접 검사하면 쉽게 알 수 있습니다. –

    +0

    완벽하게 작동합니다! 감사! – User24578

    1

    http:// 어딘가에 영어 -> 히브리어 리디렉션 코드가 누락되었을 수 있습니다.

    변경

    header('Location: '.$_SERVER['SERVER_NAME'].'/'.$_SERVER['REQUEST_URI']); 
    

    header('Location: http://'.$_SERVER['SERVER_NAME'].'/'.$_SERVER['REQUEST_URI']); 
    
    +0

    고마워, 그랬어. 내가 Frank에게 쓴 것을 보아라 :) – User24578