2016-10-12 107 views
0

我有一些ProcessWire的緩存插件的問題,但也許這是一個關於Apache .htaccess限制的更全局的問題。htaccess「如果文件存在」和「mod_rewrite -f」不起作用

例子:

我打電話給我的頁面是這樣的:http://example.com/foo 的的.htaccess應該查找是否有文件DOCUMENT_ROOT/cache/foo/index.html 如果該文件存在,則顯示文件,或者 - 簡化了這個例子 - 只需撥打一個成功頁面

示例文件結構:

cache/foo/index.html (some dummy content) 
bar (some dummy content) 
file-found.php (the success page with some print_r($_SERVER) stuff) 
.htaccess with this content: 

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{DOCUMENT_ROOT}/cache/$1/index.html -f 
    RewriteRule ^(.*) file-found.php 
</IfModule> 

這正常工作m上y本地計算機([SERVER_SOFTWARE] => Apache/2.4.18(Unix)) 但是我不想使用託管軟件包。 ([SERVER_SOFTWARE] => Apache/2.2.31(Unix))服務器的反應只是一個404:「在此服務器上找不到請求的URL/foo。」

由於apache的版本還是受到主機的限制,它不工作嗎?

Btw。 ModRewrite基本上適用於這個託管。例如是這樣的:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule ^(.*) file-found.php 
</IfModule> 

如果我打電話http://example.com/bar,文件found.php示

任何想法如何替換地解決這個「如果文件存在=>然後」在htaccess的規則?

感謝您的幫助!


編輯:更簡單:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{DOCUMENT_ROOT}/bar -f 
    RewriteRule ^(.*) file-found.php 
</IfModule> 

工作的地方,但不能在主機供應商

+0

什麼是'%{DOCUMENT_ROOT}'的現場服務器上的價值?是否存在「%{DOCUMENT_ROOT}/cache/$ 1/index.html」? – anubhava

回答

0

我認爲,在RewriteCond特殊字符應該\進行轉義(如果整個短語而不是雙引號)

RewriteRule你嘗試添加標誌,如[L]或其他。 。

+0

謝謝你的想法,但它仍然行不通,對不起。我也嘗試過逃離這個點,但沒有任何改變。在當地工作,但不在託管人身上。 – Matthias

+0

你嘗試給rewriteRule添加標誌嗎? –

+0

是的,沒有改變,我很抱歉。對我來說,感覺就像'RewriteCond'是問題所在,因爲在工作示例中'RewriteRule'沒有任何問題。 – Matthias

0

試試這個(可能需要RewriteBase /):

RewriteCond cache%{REQUEST_URI}/index.html -f 
RewriteRule ^[^/]+(?:/[^/]+)*$ cache/$0/index.html [L] 
RewriteCond cache%{REQUEST_URI}index.html -f 
RewriteRule ^(?:[^/]+/)*$ cache/$0index.html [L]