Comment puis-je configurer nginx des règles de réécriture pour obtenir CakePHP travail sur CentOS?
Salut quelqu'un merci de m'aider, je suis en train de l'installation de cakephp environnement sur un Centos serveur exécutant Nginx avec Fait CGI. J'ai déjà un site wordpress en cours d'exécution sur le serveur et un phpmyadmin site j'ai donc PHP est configuré correctement.
Mon problème est que je n'arrive pas à réécrire les règles d'installation correcte dans mon vhost, de sorte que le gâteau rend les pages correctement c'est à dire avec style et ainsi de suite. J'ai googlé, autant que possible, et le principal consensus à partir des sites comme celui ci-dessous est que j'ai besoin d'avoir la règle de réécriture suivante en place
location / {
root /var/www/sites/somedomain.com/current;
index index.php index.html;
# If the file exists as a static file serve it
# directly without running all
# the other rewrite tests on it
if (-f $request_filename) {
break;
}
if (!-f $request_filename) {
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
}
http://blog.getintheloop.eu/2008/4/17/nginx-engine-x-rewrite-rules-for-cakephp
problème est que ces réécrire supposons que vous exécutez gâteau directement de la racine de votre site qui n'est pas ce que je veux faire. J'ai une configuration standard pour chaque site, c'est à dire un dossier par site, qui contient les dossiers suivants journal, de sauvegarde, privé et public. Public où nginx est à la recherche de ses fichiers à servir, mais j'ai gâteau installé en privé avec un lien symbolique dans le public, l'établissement de liens vers /private/gâteau/
c'est mon vhost
server {
listen 80;
server_name app.domain.com;
access_log /home/public_html/app.domain.com/log/access.log;
error_log /home/public_html/app.domain.com/log/error.log;
#configure Cake app to run in a sub-directory
#Cake install is not in root, but elsewhere and configured
#in APP/webroot/index.php**
location /home/public_html/app.domain.com/private/cake {
index index.php;
if (!-e $request_filename) {
rewrite ^/(.+)$ /home/public_html/app.domain.com/private/cake/$1 last;
break;
}
}
location /home/public_html/app.domain.com/private/cake/ {
index index.php;
if (!-e $request_filename) {
rewrite ^/(.+)$ /home/public_html/app.domain.com/public/index.php?url=$1 last;
break;
}
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/public_html/app.domain.com/private/cake$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
Maintenant comme je l'ai dit, je peux voir le principal index.php de gâteau et l'avoir connecté à mon DB, mais cette page est sans style, donc avant d'aller plus loin, je tiens à le configurer correctement. Ce que je fais mal?
Grâce seanl
OriginalL'auteur | 2009-06-25
Vous devez vous connecter pour publier un commentaire.
Un coup d'œil, votre problème peut être que vous n'êtes pas de pointage de nginx à la racine de votre application. Le déploiement à la racine du dossier cake est vraiment pas la voie à suivre en vertu de n'importe quel web-server.
Ce qui suit est un serveur complet-block-je utiliser l'exécution de Gâteau apps. En réalité, je n'ai que les quatre premières lignes, puis d'inclure le reste à partir d'un fichier séparé "cakephp.inc".
Une note sur la ligne "fastcgi_param SERVER_NAME $host;". C'est parce que certains de mes applications, utiliser $_SERVER['SERVER_NAME'] et il n'a pas la même signification dans les nginx comme dans Apache. Si youe serveur a plusieurs nom(s) défini nginx sera toujours passer le premier à php.
OriginalL'auteur Martin Westin
Il y a maintenant la documentation officielle sur cette question, que j'ai utilisé et confirmé œuvres.
Les états de documentation:
OriginalL'auteur diginc
J'ai eu ce travail:
et puis, bien sûr, les gestionnaires de php et d'autres choses...
OriginalL'auteur Marco Romeny
Il n'est pas conseillé d'utiliser des "SI", des blocs à l'intérieur d'un emplacement de bloc.
Ici est un moyen plus naturel pour atteindre le même, en utilisant les regex endroits.
Dans cet exemple, CakePHP 2.x est la racine de l'application sur un serveur virtuel (saut commun des trucs comme server_name , journaux, etc):
Noter que l' .php emplacement du bloc de l'est AVANT l' /location bloc. C'est important, car avec la regex endroits, ils sont recherchés jusqu'à ce que le premier match.
Si vous avez besoin pour le faire fonctionner dans un emplacement secondaire, par exemple,http://www.example.com/something/, voici comment j'ai réussi à le faire. D'abord j'ai eu à faire un lien symbolique vers le truc de nginx: extrait de cakephp-2.x quelque part, puis dans "app/webroot" créer un lien symbolique vers lui-même avec le même nom que le code secondaire, par exemple 'ln -s ../webroot quelque chose".
Alors la configuration suivante fonctionne pour accéder à cackephp sous /quelque chose/:
Faire un lien symbolique peut probablement être évités par l'utilisation d '"alias" istead 'root', mais je ne pouvais pas comprendre comment.
OriginalL'auteur pumpal
J'ai eu un tas de problèmes la mise en place d'un CakePHP site d'une ancienne version de CakePHP 1.2 - va par la date de ce post, il pourrait être dans le temps. J'ai récemment blogué à ce sujet et suggère simplement de la mise à niveau ou l'installation d'une nouvelle version du Gâteau de la bibliothèque et tous les problèmes ont disparu.
OriginalL'auteur endyourif
Veuillez utiliser le code ci-dessous dans
vi /etc/nginx/sites-available/domainname.com
}
Son travail pour moi.
OriginalL'auteur Mayur Godhani