我正在写多语言网站。我在服务器上有几个文件,如:
/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文件以满足此标准?
答案 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。