mod_rewrite 重写康德错误地不匹配模式



这让我发疯了。我有一个非常简单的模式想要匹配:

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中的""或否定条件,则转储"presentation"

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

请注意:我只是简单地使用RewriteRule ^/bar - [E=tpl:presentation]而不使用RewriteCond,尽管如此,我仍然想知道我在上面做错了什么。

如果URI包含"a"字符(在我的示例中是这样),那么将为变量tpl分配值表示。因此,输出不应再是请求的URI,而是表示

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

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

或者更好的是:

RewriteRule a - [E=tpl:presentation]

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

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

最新更新