2009-11-02 5 views
4

우리가 현재 HTTP_ACCEPT_LANGUAGE 서버 변수를 확인하는 index.php 파일이 포함 된 웹 루트에 폴더를 만들 리디렉션 아파치/mod_rewrite를 가진 수락 - 언어를 기반으로 리디렉션하는 방법. 예 : URL을 /var/www/site/press/index.php에서 www.example.com/press/언어에 대한

을 위해 :

<?php 
    if ($_SERVER["HTTP_ACCEPT_LANGUAGE"] == "en") 
    header("location: ../press_en.php"); 
    else 
    header("location: ../press_de.php"); 
?> 

사이트로 성장했다, 우리는 지금 많은 그런 폴더가 있습니다.

RewriteEngine on 

# Set the base path here 
RewriteBase /path/to/site/ 

# The 'Accept-Language' header starts with 'en' 
RewriteCond %{HTTP:Accept-Language} (^en) [NC] 

# EN redirects 
RewriteRule press(/?)$ press_en.php [L,R] 

# DE redirects (for all languages not EN) 
RewriteRule press(/?)$ press_de.php [L,R] 

아이디어는 PHP 파일과 동일하지만, 그것은 작동하지 않습니다 나는 하나의 .htaccess 파일로 리디렉션을 이동하여이 문제를 정리하려합니다. Firefox 기본 설정에서 가능한 모든 언어 설정/주문을 시도하고 헤더가 올바른지 확인했지만 항상 press_de.php 파일을 제공합니다.

내가 무슨 일을하고 있는가, 또는 더 나은 방법은 무엇입니까? (내용 협상/MultiViews를 또는 파일 이름을 변경해야합니다 아무것도 포함하지 않는이 현재 옵션이 아닙니다).

답변

6

언어 표시기를 /en/… 또는 /de/…과 같이 URL 경로의 시작 부분에 놓습니다.

// negotiate-language.php 
$availableLanguages = array('en', 'de'); 
if (!preg_match('~^/[a-z]{2}/~', $_SERVER['REQUEST_URI'])) { 
    $preferedLanguage = someFunctionToDeterminThePreferedLanguage(); 
    if (in_array($preferedLanguage, $availableLanguages)) { 
     header('Location: http://example.com/'.$preferedLanguage.$_SERVER['REQUEST_URI']); 
    } else { 
     // language negotiation failed! 
     header($_SERVER['SERVER_PROTOCOL'].' 300 Multiple Choices', true, 300); 
     // send a document with a list of the available language representations of REQUEST_URI 
    } 
    exit; 
} 

그리고 해당 규칙 :

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)$ negotiate-language.php [L] 
RewriteRule ^([a-z]{2})/([^/]+)$ $2_$1.php [L] 

참고가 적절한 someFunctionToDeterminThePreferedLanguage 기능 등이 필요 그런 다음 원하는 언어를 확인하고 언어 표시를 앞에 붙이는 요청을 리디렉션 하나의 스크립트를 사용할 수 있습니다 Accept-Language header field은 단일 값이 아니며 한정된 값의 목록입니다. 따라서 하나 이상의 값이있을 수 있으며 첫 번째 값이 항상 바람직한 값은 아닙니다. htaccess로에서

2

RewriteEngine on 
RewriteCond %{HTTP:Accept-Language} (en) [NC] 
RewriteRule .* server.com/press_en.php [L] 


RewriteCond %{HTTP:Accept-Language} (de) [NC] 
RewriteRule .* server.com/press_de.php [L] 
관련 문제