关于php:使用nginx的子目录中的CakePHP(重写规则?)

关于php:使用nginx的子目录中的CakePHP(重写规则?)

不久前我设法让它工作起来,但回到我已启动的 cakephp 项目时,似乎我最近对 ​​nginx 所做的任何更改(或者可能是最近的更新)都破坏了我的重写规则。

目前我有:

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.php index.html index.htm;
        }

        location /basic_cake/ {
            index  index.php;

            if (-f $request_filename) {
              break;
            }
            if (!-f $request_filename) {
              rewrite ^/basic_cake/(.+)$ /basic_cake/index.php?url=$1 last;
              break;
            }
        }

        location /cake_test/ {
            index  index.php;

            if (-f $request_filename) {
              break;
            }
            if (!-f $request_filename) {
              rewrite ^/cake_test/(.+)$ /cake_test/index.php?url=$1 last;
              break;
            }
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

    }

    server {
        listen       8081;
        server_name  localhost;

        root /srv/http/html/xsp;

        location / {
            index  index.html index.htm index.aspx default.aspx;
        }

        location ~ \.(aspx|asmx|ashx|asax|ascx|soap|rem|axd|cs|config|dll)$ {
            fastcgi_pass   127.0.0.1:9001;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

    }

}

我遇到的问题是 css 和图片无法从 webroot 加载。如果我访问http://localhost/basic_cake/css/cake.generic.css,我收到一个页面,上面写着:

CakePHP:快速开发 php 框架缺少控制器

错误:找不到 CssController。

错误:在文件中创建以下 CssController 类:app/controllers/css_controller.php

注意:如果你想自定义这个错误信息,请创建app/views/errors/missing_controller.ctp CakePHP:快速开发php框架

有人知道如何解决此问题吗?

答案1

我最终使用了一种解决方法。安装 Apache 并使用 proxy_pass nginx 指令将特定文件夹的流量推送到 Apache。

答案2

我认为问题是你的重写规则应该是这样的

location / {
    root /home/public_html/sub.example.com/cake/app/webroot;
    index index.php;

    if (-f $request_filename) {
        break;
    }
    if (!-f $request_filename) {
        rewrite ^/(.+)$ /index.php?url=$1 last;
        break;
    }
}

我遇到了类似的问题并通过这个解决了cakephp 和 nginx 配置/重写规则

相关内容