1 votes

CakePHP dans un sous-répertoire avec nginx (Règles de réécriture ?)

J'ai réussi à faire en sorte que cela fonctionne il y a quelque temps, mais en retournant au projet cakephp que j'avais commencé, il semble que les modifications que j'ai apportées à nginx récemment (ou peut-être une mise à jour récente) ont cassé mes règles de réécriture.

Actuellement, j'ai :

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

    }

}

Le problème que j'ai est que les css et les images ne se chargent pas à partir du webroot. Au lieu de cela, si je visite http://localhost/basic_cake/css/cake.generic.css J'obtiens une page qui me dit :

CakePHP : le cadre de développement rapide de php de développement rapide Contrôleur manquant

Erreur : CssController n'a pas pu être trouvé.

Erreur : Créer la classe CssController ci-dessous dans le fichier app/controllers/css_controller.php

Avis : Si vous voulez personnaliser ce message d'erreur, créez app/views/errors/missing_controller.ctp CakePHP : le cadre de développement rapide de php de développement rapide

Quelqu'un a-t-il une idée de la façon de résoudre ce problème ?

1voto

olive Points 145

J'ai fini par utiliser une solution de rechange. J'ai installé Apache et utilisé une directive proxy_pass nginx pour pousser le trafic de certains dossiers vers Apache.

1voto

devuxer Points 3771

Je pense que le problème vient de vos règles de réécriture, qui devraient ressembler à ceci

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

j'ai eu un problème similaire et qui a été résolu par ce moyen règles de configuration/réécriture de cakephp et nginx

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X