php - 如何在 htaccess Apache 中将/en/file.php 翻译成 file.php?lang=en

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

最佳答案

试试这个:

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,您必须更改基本 URI,这可以通过 HTML element BASE 来完成。 .

关于php - 如何在 htaccess Apache 中将/en/file.php 翻译成 file.php?lang=en,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/536483/

相关文章:

php - 细粒度的访问控制

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

php - .htaccess 拒绝目录访问

php - 使用本地 htaccess 文件 (Apache) 实现内容安全策略

mod-rewrite - 如何在 Apache 上使用 "AND"、 "OR"进行 RewriteCond ?

php - 如何将默认表名 `users` 更改为自定义名称

PHP 系统 ("touch ...") - 没有这样的文件或目录

php - .htaccess 内部重定向不适用于子文件夹

apache - htaccess 如果某个文件存在则强制使用 SSL

linux - 将 Apache 重写规则(前端 Controller )转换为 Nginx