HT条件

时间:2012-03-26 21:32:18

标签: .htaccess mod-rewrite

我正在尝试匹配某些规则仅当查询字符串中没有“locale”时

以下是我的表现:

RewriteCond %{QUERY_STRING} !locale
RewriteRule ^acceuil$ home.php?locale=fr [NC,L]
... (More rewrite rules)

基本上我希望/acceuil转到home.php?locale=fr(完美工作)

除非如果某个链接就像这样/acceuil?locale=en,我想转而使用/home,相当于home.php?locale=en

任何重写机会都可以通过以下方式说出“/acceuil”:

if(isset($locale)) {
      go to home.php?locale=$locale
}
else{
      go to home.php?locale=fr
}

此外,我想知道是否应该在每条规则之前复制粘贴条件?

如果有可能,请告诉我,以及如何获得它,如果您对htaccess重写有一些有用的参考请分享:)

由于

2 个答案:

答案 0 :(得分:1)

RewriteCond     %{QUERY_STRING}  !locale
RewriteRule     ^acceuil$               home.php?locale=fr  [L,NC]
RewriteCond     %{QUERY_STRING}  locale=([a-zA-Z]{2})

RewriteRule     ^acceuil$               home.php?locale=%1  [L,NC]

修改
第一个问题只是检查查询字符串中是否存在local。如果不是,请将网址重写为home.php?locale=fr,如果有locale=,则会接受此后的任何内容(仅限两个字符)并将其放入home.php?locale=%1,因此acceuil?locale=fr表示{ {1}}。 home.php?locale=fr表示acceuil?locale=en

有两个条件和两个重写规则:-D

答案 1 :(得分:1)

这是一个应该有效的通用规则,它可以确保GET中的变量为localelocaleeellllocale}:

RewriteCond %{QUERY_STRING} (^|&)locale=([a-zA-A]+)(&|$)
RewriteRule ^acceuil$ home.php?locale=%1 [L,NC,QSA]

# if locale = en ...
RewriteCond %{QUERY_STRING} (^|&)locale=en(&|$)
# ... and it goes to home.php then go back to /home:
RewriteRule ^home.php$ /home [L,NC,QSA]

注意:如果它是法语,那么它是 Accueil ,而不是Acceuil :)