CakePHP in einem Unterverzeichnis mit nginx (Regeln neu schreiben?)

CakePHP in einem Unterverzeichnis mit nginx (Regeln neu schreiben?)

Vor einiger Zeit ist es mir gelungen, dies zum Laufen zu bringen, aber als ich zu dem von mir begonnenen CakePHP-Projekt zurückkehrte, schien es, als hätten die Änderungen, die ich kürzlich an Nginx vorgenommen habe (oder vielleicht ein aktuelles Update), gegen meine Regeln zum Umschreiben verstoßen.

Derzeit habe ich:

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

    }

}

Das Problem, das ich habe, ist, dass die CSS und Bilder nicht vom Webroot geladen werden. Wenn ich stattdessenhttp://localhost/basic_cake/css/cake.generic.css, erhalte ich eine Seite mit der Meldung:

CakePHP: das PHP-Framework für schnelle Entwicklung Fehlender Controller

Fehler: CssController konnte nicht gefunden werden.

Fehler: Erstellen Sie die Klasse CssController unten in der Datei: app/controllers/css_controller.php

Hinweis: Wenn Sie diese Fehlermeldung anpassen möchten, erstellen Sie app/views/errors/missing_controller.ctp CakePHP: das PHP-Framework für schnelle Entwicklung

Hat jemand eine Idee, wie man das beheben kann?

Antwort1

Ich habe schließlich einen Workaround verwendet. Ich habe Apache installiert und eine Proxy_Pass-Nginx-Direktive verwendet, um den Datenverkehr aus bestimmten Ordnern zu Apache zu leiten.

Antwort2

Ich denke, das Problem sind Ihre Umschreibregeln. Sie sollten so aussehen

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

ich hatte ein ähnliches Problem und das wurde dadurch gelöstCakePHP- und Nginx-Konfigurations-/Umschreiberegeln

verwandte Informationen