这让我疯了。我有一个非常简单的模式我希望匹配:
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而是表示
答案 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]