問題状況
同一のドメインで日本語のサイトを運営しているが、サブディレクトリ型で複数の言語に対応したサイトを構築することになった。ヘッダーには言語切替のボタンを設置したが、これがクリックされた時に同じ内容のページに遷移させたい。
例えば、日本語、英語(English: en)、フランス語(français: fr)、中国語(中文: zh)に対応したWebサイトのTOPは、それぞれ、
https://www.mysite.com/
https://www.mysite.com/en/
https://www.mysite.com/fr/
https://www.mysite.com/zh/
であり、それぞれの「ごあいさつ」や「会社情報」に相当するABOUT USのアドレスは、
https://www.mysite.com/aboutus/
https://www.mysite.com/en/aboutus/
https://www.mysite.com/fr/aboutus/
https://www.mysite.com/zh/aboutus/
である。
今、英語版サイトのABOUT USを閲覧しており、フランス語に切り替えた。この時、一律にフランス語版サイトのTOPに遷移するのではなく、フランス語版サイトのABOUT USに遷移させたい。つまり、
ではなく、
という感じで遷移させたい。
解決方法
遷移先のURIを作成するには……
- 現在閲覧しているWebページのURIを取得し、
- そこから「サブディレクトリ」の部分をいったん取り除き、
- 「プロトコルとドメイン」と「パス」に分解し、
- この2つの間に「サブディレクトリ」を挿入する。
example.php
// 1. 本来のURIを取得する
$uri = $_SERVER['REQUEST_URI'];
// 2-1. 多言語対応しているサイトのサブディレクトリを配列で設定する(#で囲むこと)
$patterns_to_remove = ["#/en#", "#/fr#", "#/zh#"];
// 2-2. URIから上記で設定したサブディレクトリを取り除く
$uri = preg_replace($patterns_to_remove, "", $uri);
// 3-1. プロトコルとドメインを抽出する
$protocol_domain = parse_url($uri, PHP_URL_SCHEME) . parse_url($uri, PHP_URL_HOST);
// 3-2. パスを抽出する
$path = parse_url($uri, PHP_URL_PATH);
// 4. サブディレクトリを挿入する
$target_uri_ja = $protocol_domain . $path;
$target_uri_en = $protocol_domain . '/en' . $path;
$target_uri_fr = $protocol_domain . '/fr' . $path;
$target_uri_fr = $protocol_domain . '/zh' . $path;