.htaccess语言检测规则

时间:2013-05-31 10:07:47

标签: .htaccess mod-rewrite

我遇到了.htaccess的一些问题 我的简化文件服务器结构如下:

/index.php
/signup.php

我需要使用虚拟网址来处理语言切换:

www.mydomain.com/en/signup.php   
www.mydomain.com/de/signup.php

所以我的.htaccess应检查url是否包含/ en /或/ de /并将其翻译为例如。 /signup.php?language=de

基本上说,它应该删除语言标记,但保留文件夹结构的其余部分。

它应该适用于我的本地xampp和我的实时服务器。 有任何想法吗?感谢

1 个答案:

答案 0 :(得分:14)

到目前为止你尝试了什么?以下内容应该有效:

RewriteRule ^/(en|de)/(.*)$  $2?language=$1 [L]

意思相当明显:进行第二场比赛($2),这是在网址中的第二个斜线之后,在其后推迟?language=,然后是第一场比赛({ {1}}),即前两个斜杠之间的内容 - 只要它是$1en之一。 如果您想将任何内容(不仅deen)与语言匹配,请将规则更改为:

de

请注意:第一组中的RewriteRule ^/(.+?)/(.*)$ $2?language=$1 [L] 会使匹配在第一个斜线停止,因此您不会重写例如。

?

/en/subdir/pippo.php

而是

pippo.php?language=en/subdir

如果有疑问,Apache网站上会有excellent documentation


修改:默认语言

要使所有其他请求(即不以subdir/pippo.php?language=en /en/开头的网址)重定向到默认语言(例如/de/),首先您必须知道语言前缀你想要识别,然后使用以下规则 - 下面,我假设有三种-3种语言,代码enende

fr

如果您没有在第一个RewriteEngine On RewriteBase / RewriteRule ^(en|de|fr)/(.*)$ $2?language=$1 [L,QSA] RewriteRule ^(.*)$ $1?language=en [L,QSA] 中定义确切的语言集(例如,使用我以前的“任何语言”解决方案),则嵌套页面上的语言检测可能会失败。重要的是规则按此顺序排列,因为第一个规则将使用语言代码匹配页面然后退出,而第二个规则仅在第一个匹配时才应用。