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

我希望我的 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解决这个问题/baz,您必须更改可以使用HTML 元素BASE完成的基本 URI 。

于 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 回答