你试过什么了?像下面这样的东西应该可以工作:
RewriteRule ^/(en|de)/(.*)$ $2?language=$1 [L]
意思很明显:取第二个$2
匹配项?language=
(或$1
之一。如果您想将任何内容(不仅是or )匹配为语言,请将规则更改为:en
de
en
de
RewriteRule ^/(.+?)/(.*)$ $2?language=$1 [L]
请注意:?
第一组中的 将使匹配在第一个斜杠处停止,这样您就不会重写例如。
/en/subdir/pippo.php
至
pippo.php?language=en/subdir
而是
subdir/pippo.php?language=en
如有疑问,Apache 网站上有一个出色的文档。
编辑:默认语言
要使所有其他请求(即不以/en/
or开头的 URL /de/
)重定向到默认语言(例如en
),首先您必须知道要识别的语言前缀,然后使用以下规则 - 下面,我假设有三种 -3- 语言,带有代码en
和:de
fr
RewriteEngine On
RewriteBase /
RewriteRule ^(en|de|fr)/(.*)$ $2?language=$1 [L,QSA]
RewriteRule ^(.*)$ $1?language=en [L,QSA]
如果您没有在第一个中定义确切的语言集RewriteRule
(例如,使用我之前的“任何语言”解决方案),嵌套页面上的语言检测可能会失败。规则按此顺序很重要,因为第一个规则会将页面与语言代码匹配然后退出,而第二个规则将仅在第一个不匹配时应用。