3

私は多言語ウェブサイトを書いています。サーバー上に次のようなファイルがいくつかあります。

/index.php
/files.php
/funny.php

そして、言語コードを次のように URL に配置して、言語サポートを追加したいと考えています。

http://mywebsite/en/index.php

次の場所にリダイレクトします。

http://mywebsite/index.php?lang=en

http://mywebsite/en/files.php

次の場所にリダイレクトします。

http://mywebsite/files.php?lang=en

たとえば、より多くの言語を配置したいと思います。

http://mywebsite/ch-ZH/index.php

そして、これがphpおよびphp5拡張子を持つファイルに対してのみ機能することを望みます。残りのファイルはそのままである必要があります。

たとえば、私が住所に行くとき

http://mywebsite/ch-ZH/index.php

現在のパスが

http://mywebsite

ではない

http://mywebsite/ch-ZH

私のPHPコードでは現在のパスに関連付けられており、現在のように動作するようにしたいので、私にとって必要です。

この基準を満たすために Apache で htaccess ファイルを準備する方法を書いていただけますか?

4

3 に答える 3

5

これを試して:

RewriteEngine on
RewriteRule ^([a-z]{2}(-[A-Z]{2})?)/(.*) $3?lang=$1 [L,QSA]

また、現在のパスの問題については、相対URIがどのように解決されるかを知る必要があります。相対URIは、他に宣言されていない場合、現在のリソースのURI(ファイルシステムパスではありません! )であるベースURIからクライアントによって解決されます。

したがって、ドキュメントにURI/en/foo/barと相対パス./bazが含まれている場合、クライアントはこれを解決します/en/foo/baz(明らかに、クライアントは実際のファイルシステムパスを認識していません)。
./baz解決するには、 HTML要素/bazで実行できるベースURIを変更する必要があります。BASE

于 2009-02-11T12:21:29.520 に答える
1

このような何かがトリックを行うはずです、

RewriteEngine on
RewriteRule ^(.[^/]+)/(.*).php([5])?$ $2.php$3?lang=$1 [L]

これは .php および .php5 ファイルにのみ一致するため、残りのファイルには影響しません。

于 2009-02-11T12:19:25.623 に答える
1

ModRewrite を使いたくない場合は、Web フォルダー ( ln -s . en) にシンボリック リンクを配置し、PHP で URL を確認することができます。

于 2009-02-11T12:41:06.163 に答える