我正在尝试为lighttpd配置重写规则,以便在找不到文件时执行特定的cakephp控制器操作。 controller-action将生成数据(png文件),保存以供将来使用,然后将其提供给客户端。下次有人试图访问该文件时,它将由lighttpd直接提供,而不执行任何php。换句话说,png文件被缓存,因此不需要重新创建它们。
据我所知,如果rewrite-once匹配,则会忽略url.rewrite-if-not-file。因此,以下内容可以提供我的缓存文件,但不能提供未缓存的文件。
url.rewrite-if-not-file = (
"^/scan/(.+)\.png" => "/mycontroller/scan/$1"
)
url.rewrite-once = (
"^/(css|files|img|js)/(.*)" => "/$1/$2",
"^/favicon.ico" => "/favicon.ico",
"^/scan/(.+\.png)" => "/scan/$1",
"^([^\?]*)(\?(.+))?$" => "/index.php?url=$1&$3",
)
我现在能想到的唯一解决方案是删除第3条规则并修改^([^\?]*)(\?(.+))?$
,以便它忽略以\scan\
开头的网址。
还有其他建议吗?
答案 0 :(得分:0)
我会在控制器中做这样的事情:
if (file_exists($file_name)) {
$this->redirect($file_name);
} else {
$this->redirect(array('action' => 'some_action', 'controller' => 'some_controller'));
}