如何在/ htaccess Apache中将/en/file.php转换为file.php?lang = en

时间:2009-02-11 12:03:28

标签: php .htaccess mod-rewrite internationalization multilingual

我正在写多语言网站。我在服务器上有几个文件,如:

/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文件以满足此标准?

3 个答案:

答案 0 :(得分: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 element BASE完成的基本URI。

答案 1 :(得分:1)

这样的事情可以解决问题,

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

这只会匹配.php和.php5文件,因此其余文件不会受到影响。

答案 2 :(得分:1)

如果您不想使用ModRewrite,可以在Web文件夹(ln -s . en)中放置符号链接,并在PHP中检查URL。