有条件的.htaccess

时间:2011-07-29 17:15:43

标签: .htaccess

我确信在网络上有类似主题的其他主题,但我无法在我自己的网站上运行。

问题是我有一个多语言网站,通过URL控制所选语言。现在网址是:

www.website.com/en/order

或其他任何英语或

www.website.com/da/order

丹麦语。这一切都运行得很好但是我希望能够只使用默认语言的普通URL,例如www.website.com/order,然后它只选择默认语言(我在我的PHP代码中定义)

使用.htaccess有没有简单的方法呢?现在我的.htaccess代码如下:

RewriteRule ^(.*)\/(.*)$ index.php?lang=$1&page=$2 [nc]

我也尝试过两条规则:

RewriteRule ^(.*)\/(.*)$ index.php?lang=$1&page=$2 [nc]
RewriteRule ^(.*)$ index.php?page=$1 [nc]

但没有任何作用..

2 个答案:

答案 0 :(得分:2)

这个应该捕获所有不以2个字母的语言代码开头的URL,并简单地将所有那些重写为index.php

RewriteCond %{REQUEST_URI} !^/[a-z]{2}/ [NC]
RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]

# match those that DO have a language code
RewriteRule ^([a-z]{2})/(.*)$ index.php?lang=$1&page=$2 [QSA,L,NC]

当然,您要确保您没有任何也是双字母组合的网页网址...

如果您只支持一小组语言(例如“da”,“en”,“de”),则可以通过使用此语言使其更加强大

RewriteCond %{REQUEST_URI} !^/(da|en|de)/ [NC]

顺便说一句,你总是要记得使用QSA-flag将任何现有的GET参数附加到重写的URL。

答案 1 :(得分:0)

您可以尝试使用RewriteCond。对于(未经测试且可能是错误的)示例,使用英语作为默认值:

RewriteCond %{REQUEST_URI} ^\/..\/ [NC]
RewriteRule ^\/(..)\/(.*) index.php?lang=$1&page=$2 [NC]
RewriteCond %{REQUEST_URI} ^\/.* [NC]
RewriteRule ^\/(.*) index.php?lang=en&page=$1 [NC]