2013-11-15 3 views
0

Я использую cakephp, и теперь мне нужно сделать внутренний перенаправление на .html, если файл существует в папке с кешем.open .html вместо php с использованием htaccess

Итак, предположим, что есть контроллер CTRL и действие ACT, URL-адрес для него является:
domain.com/ctrl/act
Теперь я хочу, чтобы мой Htaccess, чтобы проверить, есть ли .html внутри Teh кэш-папке с тем же именем контроллера и действием, например:
/cache/ctrl/act.html
если файл существует, просто отправьте его и не трогайте php.
Я получил его для работы, но теперь cakephp не обрабатывается, сервер возвращает ошибку 500.
Не могли бы вы помочь мне в этом. Мне также нужно проверить, есть ли /index.html в cachefolder/ctrl /, потому что ссылки иногда имеют только имя контроллера.

<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.

спасибо

1

Изменить первое правило этого правила:

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 похож на «localhost», а не «localhost/app/webroot», то есть где выполняется htaccess. – Jonathan

+0

Итак, этот каталог кэша находится в документе document_root/app/webroot/cache? – anubhava

0

Добавить следующее routes.php

Router::parseExtensions('html'); 

Это сдирать .html так CakePHP может просто работать 'нормально'

Смежные вопросы