CakePHP & NGINX настройки / переписать правила
Привет, кто-нибудь, пожалуйста, помогите мне, я также спросил об этом в stackoverflow, но не получил большой ответ и обсуждал, было ли это программированием или связанным с сервером.
Я пытаюсь настроить среду Cake PHP на сервере Centos с Nginx и Fact CGI. У меня уже есть сайт WordPress, работающий на сервере, и сайт phpmyadmin, поэтому я правильно настроил PHP.
Моя проблема в том, что я не могу правильно настроить правила перезаписи в моем vhost, чтобы торт правильно отображал страницы, то есть со стилем и так далее. Я погуглил как можно больше, и главный консенсус сайтов, подобных перечисленному ниже, заключается в том, что мне нужно иметь следующее правило перезаписи
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
проблема в том, что эти переписывания предполагают, что вы запускаете торт прямо из корня, что я не хочу делать. У меня есть стандартная настройка для каждого сайта, то есть одна папка на сайт, содержащая следующие папки журнала, резервные копии, частные и публичные. Публичное существо, где nginx ищет свои файлы для обслуживания, но у меня установлен приватный торт с символической ссылкой публично, ссылающейся на /private/cake/
это мой призрак
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;
}
}
Теперь, как я уже сказал, я вижу основной index.php торта и подключил его к моей БД, но эта страница не имеет стилизации, поэтому, прежде чем продолжить, я бы хотел настроить ее правильно. Что я делаю неправильно……….
Спасибо сэнл
3 ответа
Для очень простой / чистый и работает метод с cakephp. (Что я сделал, чтобы это заработало, чтобы добавить в коллекцию конфигов)
server {
listen 80;
server_name _;
root /var/www/webapplication/app/webroot;
if (-f $request_filename) {
break;
}
if (!-f $request_filename) {
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
location /favicon.ico {
empty_gif;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /usr/nginx/conf/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/webapplication/app/webroot/index.php;
# $fastcgi_script_name;
}
}
location /cake {
try_files $uri $uri/ @cakephp;
}
location = @cakephp {
fastcgi_param SCRIPT_FILENAME /home/public_html/app.domain.com/private/cake/index.php;
fastcgi_param QUERY_STRING url=$request_uri;
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
}
Это предполагает, что вы получаете доступ к cakephp через http://apps.server.com/cakephp и имеете nginx 0.7.x.
Если у вас nginx 0.6.x, используйте error_page 404 = @cakephp
вместо try_files
,
Удачи!
Ваш php-файл отлавливается местоположением "~ .php$", и он работает только один.
Это не сработает:
location /home/public_html/app.domain.com/private/cake/
потому что вы даете системный путь, и вы должны указать путь URI. То же самое с правилом перезаписи. Я вижу, что ваша конфигурация похожа на apache:), так что это может быть то, что вы ищете:
location /root_of_my_site {
alias home/public_html/app.domain.com/...
}