我正在尝试匹配某些规则仅当查询字符串中没有“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重写有一些有用的参考请分享:)
由于
答案 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中的变量为locale
(localeee
不llllocale
}:
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
:)