CakePHP em um subdiretório usando nginx (reescrever regras?)

CakePHP em um subdiretório usando nginx (reescrever regras?)

Consegui fazer isso funcionar há um tempo, mas ao retornar ao projeto cakephp que comecei, parece que quaisquer alterações que fiz no nginx recentemente (ou talvez uma atualização recente) quebraram minhas regras de reescrita.

Atualmente tenho:

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;
        }

    }

}

O problema que tenho é que o css e as imagens não carregam do webroot. Em vez disso, se eu visitarhttp://localhost/basic_cake/css/cake.generic.css, recebo uma página que me diz:

CakePHP: o framework php de rápido desenvolvimento Missing Controller

Erro: CssController não foi encontrado.

Erro: Crie a classe CssController abaixo no arquivo: app/controllers/css_controller.php

Aviso: Se você deseja personalizar esta mensagem de erro, crie app/views/errors/missing_controller.ctp CakePHP: o framework php de desenvolvimento rápido

Alguém tem alguma idéia de como consertar isso?

Responder1

Acabei usando uma solução alternativa. Instalei o Apache e usei uma diretiva proxy_pass nginx para enviar o tráfego de pastas específicas para o Apache.

Responder2

Eu acho que o problema são suas regras de reescrita, deveria ficar assim

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;
    }
}

eu tive um problema semelhante e que foi resolvido através desteregras de configuração/reescrita do cakephp e nginx

informação relacionada