2011-01-06 87 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