2010-06-04 39 views
0

我想阿帕奇渲染%{DOCUMENT_ROOT} /cache/%1.html如何重寫只(如果它存在的.htaccess)

如果%1請求路徑靜態文件。我的整個網站位於一個名爲cache_test的子目錄中,並且具有以下.htaccess文件。但在7號線和11重寫規則將不匹配:(。

感謝您提前預支! 親切的問候, 尼克拉斯

1 RewriteEngine On 
2 RewriteBase  /cache_test/ 
3 
4 RewriteCond  %{THE_REQUEST} ^(GET|HEAD) 
5 RewriteCond  %{REQUEST_URI} ^/([^.]+)$ 
6 RewriteCond  %{DOCUMENT_ROOT}/cache/%1.html -f 
7 RewriteRule  ^/[^.]+$ /cache/%1.html [QSA,L] 
8 
9 RewriteCond  %{THE_REQUEST} ^(GET|HEAD) 
10 RewriteCond  %{DOCUMENT_ROOT}/cache/index.html -f 
11 RewriteRule  ^/$ /cache/index.html [QSA,L] 
12 
13 RewriteRule  (.*/cache_test)$ $1/ 
14 RewriteRule  ^$ index.html [QSA] 
15 RewriteRule  ^([^.]+)$ $1.html [QSA] 
16 RewriteCond  %{REQUEST_FILENAME} !-f 
17 RewriteRule  ^(.*)$ dispatch.fcgi [QSA,L] 

回答

0

RewriteBase + DOCUMENT_ROOT ==>煩惱...

我不是在一個位置,現在來測試,你可能想請檢查是否一切正常,變化:

6 RewriteCond  %{DOCUMENT_ROOT}/cache/%1.html -f 

要:

6 RewriteCond  ../cache/%1.html -f 

如果沒有,我看不出有什麼別的選擇,只能忘記RewriteBase的優勢&丟棄。

在旁註中,爲什麼你需要這個?

RewriteRule  ^$ index.html [QSA] 
+0

感謝您的回覆Wrikken! 我試圖使用相對路徑,因爲你指出它並沒有工作。關於「^ $ index.html [QSA]」 - 我不確定。我必須承認,mod_rewrite遠沒有我強烈的一面。第13到17行都是讓Apache將所有內容路由到rails(通過fcgi)。 關於將文件從RewriteBase轉換成文件後,文件的外觀如何? 謝謝,並提前坦克你。 親切的問候, 尼克拉斯 – 2010-06-07 07:11:43

+0

如果你不添加一個rewritebase(http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritebase),你的大部分模式需要匹配cache_test前面的路徑(^ /?cache_test /) – Wrikken 2010-06-07 09:00:54