.htaccess冲突的重写规则

时间:2013-07-25 01:34:28

标签: .htaccess mod-rewrite url-rewriting rewrite

我正在尝试将网站更改为多语言,因此我的网址是这样的:

www.company.com/en/about
www.company.com/fr/about

应该指向index.php?lang = en& what = about

所以我定义了以下重写规则(有效)

RewriteRule    ^en/(.*)$    ?lang=en&what=$1    [NC,L]
RewriteRule    ^fr/(.*)$    ?lang=fr&what=$2    [NC,L]

但我还需要首页网址为www.company.com/en(指向index.php?lang=en) 这对于这条规则不起作用。

最好的解决方案就是

RewriteRule    ^(.*)/(.*)$    ?lang=$1&what=$2    [NC,L]

但它会转换所有网址,例如href='css.css'类型的引用,因此会混淆整个页面。

那么我应该如何将第一个GET变量限制为两个字符?或其中一种定义的语言?

1 个答案:

答案 0 :(得分:1)

尝试:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]{2})(?:/(.*)|)$ /?lang=$1&what=$2 [L]

第一个分组([a-z]{2})捕获2个字母的语言。第二个可选分组捕获“什么”。如果那里什么也没有,那么“什么”将是空白的。