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