0

現在、私は 2 つの言語 (フランス語と英語) を使用する Web サイトを持っています。

現在の動作方法は、誰かがmysite.com/folder/file.phpたとえば、使用する言語を特定し、独自のパスとファイル名 ( ) を取得して(言語が英語の場合) サービスを提供するfile.php単純なスクリプトです。ただし、URL に表示されるのは.file.phpmysite.com/en/folder/file.phpmysite.com/folder/file.php

任意のフォルダーと任意のファイルに対して、同じスクリプトが使用されます。新しいファイルを追加する場合は、ユーザーがブラウザーに入力するフォルダーとフォルダーにファイルを追加する必要がenありfrます。

どのような URL を入力しても 1 つのファイルが開かれ、言語と要求されたフォルダー/ファイルがチェックされ、正しい言語ファイルが提供されるように、いくつかの.htaccessトリックを行うことはできますか?.php

URL 内のすべてのファイルに対して提供される php ファイルを次に示します。

<?php 

// Get current document path which is mirrored in the language folders
$docpath = $_SERVER['PHP_SELF'];

// Get current document name (Used when switching languages so that the same
current page is shown when language is changed)
$docname = GetDocName();

//call up lang.php which handles display of appropriate language webpage.
//lang.php uses $docpath and $docname to give out the proper $langfile.
//$docpath/$docname is mirrored in the /lang/en and /lang/fr folders
$langfile = GetDocRoot()."/lang/lang.php";
include("$langfile"); //Call up the proper language file to display

function GetDocRoot()
{
 $temp = getenv("SCRIPT_NAME");
 $localpath=realpath(basename(getenv("SCRIPT_NAME")));
 $localpath=str_replace("\\","/",$localpath);
 $docroot=substr($localpath,0, strpos($localpath,$temp));
 return $docroot;
}

function GetDocName()
{
$currentFile = $_SERVER["SCRIPT_NAME"];
$parts = Explode('/', $currentFile);
$dn = $parts[count($parts) - 1];
return $dn;
}

?>
4

1 に答える 1

1

一般的な解決策は、サイトのルート(/index.php)に優先言語を特定させてから、言語コードを含むURLにリダイレクトすることです。ファイルがディスク上の言語で区切られている場合は、直接リクエストできます。

または、.htaccessまたはホスト設定に単純な正規表現を追加して、要求されたURLから言語を取得し、同様のすべての要求を1つのファイルに送信することができます。

RewriteEngine On
RewriteRule ^/(.+)/folder/file.php$ /folder/file.php?lang=$1

次に$_GET['lang']、PHPで参照して、要求された言語を確認します。これを拡張して、サイト上のすべての同様のファイルに対してより一般化することをお勧めします。例:

RewriteRule ^/(.+?)/(.+)\.php$ /$2.php?lang=$1
于 2012-09-09T22:10:00.867 に答える