.htaccess HTC访问条件

.htaccess HTC访问条件,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,只有当查询字符串中没有“locale”时,我才尝试匹配某些规则 我是这样做的: RewriteCond %{QUERY_STRING} !locale RewriteRule ^acceuil$ home.php?locale=fr [NC,L] ... (More rewrite rules) 基本上我希望/acceuil进入home.php?locale=fr(工作正常) 除了如果链接是这样的,我想让它转到/home,它相当于home.php?locale=en 任何重写的机会都可以用以下

只有当查询字符串中没有“locale”时,我才尝试匹配某些规则

我是这样做的:

RewriteCond %{QUERY_STRING} !locale
RewriteRule ^acceuil$ home.php?locale=fr [NC,L]
... (More rewrite rules)
基本上我希望
/acceuil
进入
home.php?locale=fr
(工作正常)

除了如果链接是这样的,我想让它转到
/home
,它相当于
home.php?locale=en

任何重写的机会都可以用以下方式说“
/acceuil
”:

if(isset($locale)) {
      go to home.php?locale=$locale
}
else{
      go to home.php?locale=fr
}
另外,我想知道是否应该在每个规则之前复制粘贴条件

请让我知道这是否可行,以及我如何才能让它继续下去,如果您有一些关于htaccess重写的有用参考,请分享:)

谢谢

编辑:
第一个条件是检查查询字符串中是否存在
local
。如果不是,请将URL重写到
home.php?locale=fr
,如果有
locale=
,则它会将其后的内容(仅两个字符)放入
home.php?locale=%1
中,因此
acceuil?locale=fr
表示
home.php?locale=fr
。而
acceuil?locale=en
意味着
home.php?locale=en


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

这里有一个通用规则应该可以工作,它确保GET中的变量是
locale
(not
localeee
not
llllocale
):



注意:如果它是法语,那么它是Accueil,而不是Accueil,谢谢您的快速回复!根据这个逻辑,我明白了条件只适用于一个规则,对吗?如果是法语,那么它是
Accueil
,而不是
Accueil
:)谢谢你的帮助和thx帮我找到了打字错误:)
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]
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]