mod_rewrite RewriteCond 错误地不匹配模式
mod_rewrite RewriteCond falsly doesn't match pattern
这让我发疯。我想匹配一个非常简单的模式:
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 将被分配值 presentation。因此,输出不应再是请求的 URI,而是 presentation
问题出在第二条规则上,应该是%{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]
这让我发疯。我想匹配一个非常简单的模式:
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 将被分配值 presentation。因此,输出不应再是请求的 URI,而是 presentation
问题出在第二条规则上,应该是%{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]