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