1

2つの言語(ヘブライ語と英語)のWordPressサイトがあり、ブラウザーの言語に従ってリダイレクトする必要があります。qTranslateプラグインを使用して、両方の言語でコンテンツを作成しています。このプラグインにはリダイレクト機能もありますが、ホームページに対してのみリダイレクトが作成されるため、ホームページだけでなく内部ページに対してもリダイレクトを実行する必要があります。

別の開発者がリダイレクトを作成するためにこのコードを作成しましたが、何らかの理由で面白いリダイレクトが作成されます。これは、言語をヘブライ語に切り替えてから、サイトを離れて直接入力しようとした場合にのみ発生し、http://domain.com/en/リダイレクトされますhttp://domain.com/domain.com/(英語に切り替えた場合は発生しません)。

ヘブライ語のリダイレクトを作成する「ヘッダー(場所:)」で遊んでみましたが、それを機能させる方法がわかりませんでした。相対パスの代わりにフルパスを使用するか、$_SERVER['SERVER_NAME']との間の「/」を削除してみました。$_SERVER['REQUEST_URI']しかし、再帰的なURLまたは二重の「/」を含むURLを取得しました(http://domain.com//内部ページの場合も同様ですhttp://domain.com//page)。

URL構造は次のとおりです。

  • domain.com/ヘブライ語
  • domain.com/en/英語の場合

言語を切り替えると、パラメーター$ lang=enまたは$lang=heが追加されます。

これが理にかなっていることを願っています、そしてどうもありがとう!

これは、リダイレクトを担当するコードです。

<?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;
   } 

 ?>  
4

2 に答える 2

2

それ以外の

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

試す

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

URL、特にLocationヘッダーのURLには、プロトコルとドメイン名を含める必要があります。Locationヘッダーの相対URLはHTTPRFCに違反していると思います。

プロトコルを省略すると、絶対URLではなく相対URLを意図せずに指定することになります。

編集:REQUEST_URIにはすでに接頭辞が付いている/ため、concatに含める必要はありません。

于 2012-11-29T00:24:38.497 に答える
1

http://おそらく英語->ヘブライ語のリダイレクトコードのどこかが欠落しています。

変化する

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

header('Location: http://'.$_SERVER['SERVER_NAME'].'/'.$_SERVER['REQUEST_URI']);
于 2012-11-29T00:29:13.050 に答える