Назад | Перейти на главную страницу

Конфигурация / перезапись cakephp и nginx

Привет, кто-нибудь, пожалуйста, помогите мне, я тоже спросил об этом в stackoverflow, но не получил большого ответа и обсуждал, связано ли это с программированием или сервером.

Я пытаюсь настроить среду cakephp на сервере Centos, на котором работает Nginx с Fact CGI. У меня уже есть сайт WordPress, работающий на сервере, и сайт phpmyadmin, поэтому я правильно настроил PHP.

Моя проблема в том, что я не могу правильно настроить правила перезаписи в моем виртуальном хосте, чтобы торт правильно отображал страницы, то есть со стилями и так далее. Я искал в Google как можно больше, и большинство сайтов, подобных указанному ниже, пришли к выводу, что мне нужно иметь следующее правило перезаписи

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 торта и подключил его к своей БД, но эта страница не стилизована, поэтому, прежде чем продолжить, я хотел бы правильно ее настроить. Что я делаю не так……….

Спасибо, Шонл

Для очень простого / чистого и работающего метода с 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/...
}