RewriteCond捕获组不匹配
问题描述:
我正在设置Zend_Cache_Backend_Static并根据手册(http://framework.zend.com/manual/en/zend.cache.backends.html),它需要“对默认的.htaccess文件进行一些更改,以便将请求定向到静态文件(如果存在)”。RewriteCond捕获组不匹配
我的问题是,下面的建议图案不为我工作:
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.(html|xml|json|opml|svg) -f
RewriteRule .* cached/%{REQUEST_URI}.%1 [L]
我下来打破了规则,发现我了以下工作:
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.html -f
RewriteRule .* cached/%{REQUEST_URI}.html [L]
打破它进一步下降以下模式不起作用:
RewriteCond %{DOCUMENT_ROOT}/cached/8hc.(html|xml) -f
RewriteRule (.*) cached/8hc.html [L]
并且这样做:
RewriteCond %{DOCUMENT_ROOT}/cached/8hc.html -f
RewriteRule (.*) cached/8hc.html [L]
在我看来,像RewriteCond中的捕获组括号不起作用。
任何人都可以解释为什么这可能是? 我有没有在Apache中设置一些设置?
Apache的版本的Apache/2.2.14(Win32的)
答
RewriteCond
的语法不同于RewriteRule
:
RewriteCond TestString CondPattern
这里CondPattern是允许一个正则表达式的一部分或其他特殊模式,如-f
。但TestString是一个纯文本字符串,其中只展开了环境变量(%{NAME}
)和参考($n
,%n
)。
所以为了这个工作,你需要一些像这样的情况下分化:
RewriteCond .html .+
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}%0 -f [OR]
RewriteCond .xml .+
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}%0 -f [OR]
RewriteCond .json .+
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}%0 -f [OR]
RewriteCond .opml .+
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}%0 -f [OR]
RewriteCond .svg .+
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}%0 -f
RewriteRule .+ cached/%{REQUEST_URI}%0 [L]
这里,每个测试包括其中,第一条件是用来捕捉文件扩展名是两个条件用于RewriteRule
。