CakePHP en un subdirectorio usando nginx (¿Reescribir reglas?)

CakePHP en un subdirectorio usando nginx (¿Reescribir reglas?)

Logré que esto funcionara hace un tiempo, pero al regresar al proyecto cakephp que había comenzado, parece que cualquier cambio que haya realizado en nginx recientemente (o tal vez una actualización reciente) ha roto mis reglas de reescritura.

Actualmente tengo:

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

    }

}

El problema que tengo es que el CSS y las imágenes no se cargan desde webroot. En cambio si visitohttp://localhost/basic_cake/css/cake.generic.css, me sale una pagina que me dice:

CakePHP: el marco PHP de rápido desarrollo Missing Controller

Error: no se pudo encontrar CssController.

Error: cree la clase CssController a continuación en el archivo: app/controllers/css_controller.php

Aviso: si desea personalizar este mensaje de error, cree app/views/errors/missing_controller.ctp CakePHP: el marco PHP de desarrollo rápido

¿Alguien tiene alguna idea sobre cómo solucionar este problema?

Respuesta1

Terminé usando una solución alternativa. Instalé Apache y usé una directiva nginx proxy_pass para enviar el tráfico de carpetas particulares a Apache.

Respuesta2

Creo que el problema son tus reglas de reescritura, debería verse así

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

Tuve un problema similar y se resolvió a través de estereglas de configuración/reescritura de cakephp y nginx

información relacionada