2011-01-06 86 views
0

我正在设置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的)

回答

1

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