2

我正在尝试为 lighttpd 配置重写规则,以便在找不到文件时执行特定的 cakephp 控制器操作。控制器动作将生成数据(png 文件),保存以备将来使用,然后将其提供给客户端。下次有人尝试访问该文件时,它将由 lighttpd 直接提供服务,而不执行任何 php.ini 文件。换句话说,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",
)

我现在能想到的唯一解决方案是删除第三条规则并进行修改^([^\?]*)(\?(.+))?$,使其忽略以\scan\.

还有其他建议吗?

4

1 回答 1

0

我会在控制器中做这样的事情:

if (file_exists($file_name)) {
    $this->redirect($file_name);
} else {
    $this->redirect(array('action' => 'some_action', 'controller' => 'some_controller'));
}
于 2013-11-19T16:33:04.307 回答