mod_rewrite RewriteCond falsly与模式不匹配

时间:2015-03-06 12:00:43

标签: regex mod-rewrite conditional-statements

这让我疯了。我有一个非常简单的模式我希望匹配:

RewriteEngine On

RewriteRule .? - [E=tpl:%{REQUEST_URI}]

RewriteCond ${REQUEST_URI} a
RewriteRule .? - [E=tpl:presentation]

RewriteRule .? index.php?tpl=%{ENV:tpl} [QSA,L]

index.php 中,我目前只需var_dump($_REQUEST);来检查tpl的值。每当我访问URI /aaa_foo/bar时,它都会转储相同的URI。但是,如果我用简单的'。'替换RewriteCond中的'a'或者否定条件,它会转储'presentation'

我完全无法理解为什么'a'不匹配,显然在字符串中有三个。我错过了什么吗?

请注意:我只使用RewriteRule ^/bar - [E=tpl:presentation]而不使用RewriteCond,但我仍然想知道我在那里做错了什么。

如果URI包含'a'字符(在我的示例中它包含),则为该变量tpl分配值表示。因此,输出不应再是请求的URI而是表示

2 个答案:

答案 0 :(得分:1)

问题在第二条规则中,它应该是%{REQUEST_URI}而不是${REQUEST_URI}

RewriteCond %{REQUEST_URI} a
RewriteRule .? - [E=tpl:presentation]

或者更好:

RewriteRule a - [E=tpl:presentation]

答案 1 :(得分:1)

为什么这么复杂?以下应该做你想要的:

RewriteRule a index.php?tpl=presentation [QSA,L]
RewriteRule .* index.php?tpl=%{REQUEST_URI} [QSA,L]