ウェブサイトwww.example.com/にアクセスする場合、訪問者は正しい言語バージョンにリダイレクトされる必要があります。英語の場合はwww.example.com/en、スペイン語の場合はwww.example.com/es。
現在の実装は、www.example.com/index.varにアクセスしてwww.example.com/index.enにリダイレクトする場合にのみ機能します。これをwww.example.com/en/に書き換えたい
私の実装は https://httpd.Apache.org/docs/2.4/content-negotiation.html に基づいています。
Options -MultiViews
RewriteEngine On
RewriteBase /
AddHandler type-map .var
LanguagePriority en es de
ForceLanguagePriority Fallback
URI: index; vary="language"
URI: index.en.html
Content-type: text/html
Content-language: en
URI: index.es.html
Content-type: text/html;charset=utf-8
Content-language: es
URI: index.de.html
Content-type: text/html;charset=utf-8
Content-language: de
重要:MultiViewsは無効になっています
あなたの素晴らしいソリューションを楽しみにしています。
これについてもう少し詳しく説明します...
これは私のファイル構造の例です。
ファイルを書き換えるか、リダイレクトする必要があります。 -index.var-> / -index.en.html-> /en/ -index。 es.html-> /es/ -about.var-> /about -about.en.html-> /en/about -about.es .html-> /es/about -images/img_1.jpg-> /images/img_1.jpg -images/logo.var-> /images/logo.png(ファイルではありません) -images/logo.en.png-> /en/images/logo.png -images/logo.es.png->/es/images/logo .png
画像およびその他のリソースの書き換えはオプションです。 htmlファイルの書き換えを正しく行うことのみが重要です
Apacheドキュメントは、これの実例です(コンテンツネゴシエーションを使用)。
ApacheのSVNリポジトリで解決策を見つけたと思います。 (まだテストしていません)
多言語サイトの構成
多言語エラーページの設定
言語とエンコーディングの設定を使用した構成
ここでの実装では、タイプマップファイルに.varではなく.html拡張子を使用しています。つまり、.html.enの代わりに拡張子.htmlを持つhtmlファイルを使用する場合は、置き換える必要があります
AddHandler type-map .html
と
AddHandler type-map .var
私がしたように。
これはPHPで行うだけです。 htaccessでそれを行う方法がわかりません。
私はindex.phpを作成します:
<?php
header("Status: 200 OK");
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
switch ($lang){
case "fr":
//echo "PAGE FR";
include("index_fr.php");//include check session FR
break;
case "it":
//echo "PAGE IT";
include("index_it.php");
break;
case "en":
//echo "PAGE EN";
include("index_en.php");
break;
default:
//echo "PAGE EN - Setting Default";
include("index_en.php");//include EN in all other cases of different lang detection
break;
}
?>
または、リダイレクトが必要な場合は、次を実行できます。
<?php
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
switch ($lang){
case "en":
header('Location: http://www.example.com/en/', true, 302);
exit;
case "es":
header('Location: http://www.example.com/es/', true, 302);
exit;
case "de":
header('Location: http://www.example.com/en/', true, 302);
exit;
default:
//echo "PAGE EN - Setting Default";
include("index_en.php");//include EN in all other cases of different lang detection
break;
}
?>