2013-11-15 46 views
0

我正在使用cakephp,現在我需要做一個內部重定向到.html,如果文件存在於緩存文件夾內。打開.html而不是php使用htaccess

所以,讓我們說有一個控制器CTRL和動作ACT,它的網址是:
domain.com/ctrl/act
現在,我希望我的htaccess的,以檢查是否有內德一個.html緩存文件夾與控制器的名稱和操作相同,如:
/cache/ctrl/act.html
如果文件存在,只需發送它並不要觸摸php。
我得到它的工作,但現在cakephp沒有被處理,服務器返回500錯誤。
你能幫我解決這個問題嗎?我還需要檢查cachefolder/ctrl /中是否存在/index.html,因爲鏈接有時只有控制器名稱。

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI}.html !^/cache 
RewriteRule ^(.*)$ cache/$1.html [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 
+0

我不認爲讓用戶直接查看緩存中的文件是一個好主意。 – Kai

+0

你是什麼意思? – Jonathan

+0

出於安全原因,您不希望人們能夠直接訪問tmp文件夾中的項目。在Cake中編寫一個頁面會更好,它會讀取並顯示該文件(如果存在)。 – Kai

回答

0

無法使用htaccess。
我不得不在AppController中使用beforefilter。

謝謝

1

您的第一條規則更改這個規則:在routes.php文件

Router::parseExtensions('html'); 

以下

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/app/webroot/cache/$1.html -f 
RewriteRule ^(.+?)/?$ cache/$1.html [L] 
+0

它沒有工作。 CakePHP沒問題,但沒有找到.html – Jonathan

+0

它不工作,因爲document_root就像是「本地主機」而不是「本地主機/應用程序/ webroot」,這是htaccess正在執行的地方 – Jonathan

+0

因此,這個緩存目錄是在document_root/app/webroot/cache? – anubhava

0

加那麼CakePHP的可以只工作 '正常' 這將剝去的.html