Apache RewriteCond中变量的负比较

时间:2017-07-13 18:45:21

标签: regex apache mod-rewrite

我有一个Rewrite块,旨在将用户重定向到反映其区域设置的URL(如果它们尚未完成)。这似乎要求我比较两个变量,我认为这在RewriteCond中有点棘手,但是必须有一种优雅地做到这一点的方法,而不是有几个不同的规则。

基本上 - 如果我在这里但不应该(因为地理围栏),请重定向到已识别的路径。

# Snip several SetEnvIf rules for the UserLocale variable used below

RewriteCond %{REQUEST_URI} ^/(us|au|uk|eu)/$
# This is where I'm having trouble. 
# This following condition should evaluate whether the requested URI matches the StoreLocale
RewriteCond %{ENV:UserLocale} !%1
RewriteRule ^(.*)$ https://example.com/%{ENV:UserLocale}/ [R=302,L]

我知道combining two variables有一些语法,但我还没有在这里得到否定的测试。

1 个答案:

答案 0 :(得分:1)

您可以使用以下规则:

RewriteCond %{ENV:UserLocale}#$1 !^([^#]+)#\1$
RewriteRule ^(us|au|uk|eu)/$ https://example.com/%{ENV:UserLocale}/ [R=302,L,NC]

这将是有效的代码:

if ( %{ENV:UserLocale} != $1 ) {
   RewriteRule ^(us|au|uk|eu)/$ https://example.com/%{ENV:UserLocale}/ 
}