如何配置nginx的重写规则获得CakePHP的工作在CentOS?(How do I config

2019-07-29 07:17发布

喜有人请帮助我,我想设置Nginx的运行与事实CGI CentOS的服务器上的CakePHP的环境。 我已经有一个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的地方正在寻找它的文件服务,但我已经安装在专用的蛋糕,在公共链接一个符号链接回/私营/蛋糕/

这是我的虚拟主机

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文件,并将它连接到我的数据库,但是这个页面是没有这样的造型我之前进行任何进一步的,我想正确配置。 我究竟做错了什么?

由于seanl

Answer 1:

一目了然,您的问题可能是你没有指向nginx的你的应用程序的根目录。 部署到根饼夹真的不是在任何Web服务器的路要走。

下面是我使用运行应用程序蛋糕一个完整的服务器模块。 在现实中我只有前四个行,然后包括来自一个单独的文件“cakephp.inc”休息。

该行上的说明“fastcgi_param SERVER_NAME $主持人;”。 这是因为我的一些应用程序的使用$ _ SERVER [“SERVER_NAME”],它并没有在nginx的相同的含义,如Apache的。 如果YOUE服务器有多个服务器名(S)定义的nginx总是通过第一个PHP的。

server { 
    server_name  cakeapp.example.com;
    root   /var/www/vhosts/cake/app/webroot;
    access_log  /var/log/nginx/cakeapp.access.log;
    error_log   /var/log/nginx/cakeapp.error.log;

    listen       80;
    rewrite_log on;

    # rewrite rules for cakephp
    location / {
        index  index.php index.html;

        # If the file exists as a static file serve it 
        # directly without running all
        # the other rewite tests on it
        if (-f $request_filename) { 
            break; 
        }
        if (!-f $request_filename) {
            rewrite ^/(.+)$ /index.php?url=$1 last;
            break;
        }
    }

    location ~* \favicon.ico$ {
        expires 6m;
    }
    location ~ ^/img/ { 
        expires 7d; 
    } 

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SERVER_NAME $host;
    }

    location ~ /\.ht {
        deny  all;
    }
}


Answer 2:

现在有关于这个问题的正式文件 ,这在我以前并确认工作。

该文件规定:

server {
  listen   80;
  server_name www.example.com;
  rewrite ^(.*) http://example.com$1 permanent;
}

server {
  listen   80;
  server_name example.com;

  # root directive should be global
  root   /var/www/example.com/public/app/webroot/;
  index  index.php;

  access_log /var/www/example.com/log/access.log;
  error_log /var/www/example.com/log/error.log;

  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
    try_files $uri =404;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index   index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}


Answer 3:

我得到这个工作:

root DIR/app/webroot/;
location / {
    index index.php index.html;
    rewrite ^/$ /index.php?url=/;
    if (!-e $request_filename) {
        rewrite ^(/.*)$ /index.php?url=$1 last;
    }
}

然后当然PHP和东西处理...



Answer 4:

这是不可取“IF”嵌段的“位置”块内使用。

这里是达到同样的更自然的方式,使用正则表达式的位置。

在这个例子中,CakePHP的x是在虚拟主机的根应用程式(跳过像服务器名共同的东西,日志等):

 root   /path/to/cakephp-2.x_root/app/webroot;
 index index.php;

 location ~ .+\.php$ {
        try_files $uri =404; #handle requests for missing .php files
        include        fastcgi_params;
        fastcgi_pass   127.0.0.1:7001; #the FPM pool port
    }


    location ~ ^/(.*) {
        try_files $uri $uri/ /index.php?url=$1&$args;
    }

需要注意的是.PHP位置块是前/位置块。 这是因为与正则表达式的位置,它们的搜索,直到第一场比赛是非常重要的。

如果你需要使它在sublocation,如运行http://www.example.com/something/ ,这里是我如何成功地做到这一点。 首先,我不得不做一个符号链接,诱骗nginx的:提取CakePHP的-2.x的地方,然后在“应用程序/ webroot的”创建一个符号链接本身具有相同的名称作为sublocation,如“LN -s ../webroot东西” 。

那么下面的配置工作下/某事/访问cackephp:

    location ~ ^/something/.+\.php$ {
        try_files $uri =404; #handle requests for missing .php files
        root /path/to/cakephp-2.x_root/app/webroot;
        include        fastcgi_params;
        fastcgi_pass   127.0.0.1:7001; #the FPM pool port
    }

    location ~ ^/something(?:/)(.*) {
        root /path/to/cakephp-2.x_root/app/webroot;
        index index.php;
        try_files $uri $uri/ /something/index.php?url=$1&$args;
    }

符号链接或许可以通过使用“别名”“根”的istead避免,但我无法弄清楚如何。



Answer 5:

我有一大堆的问题,设立时正在运行的CakePHP 1.2的旧版本的CakePHP的网站 - 通过这个帖子可能是周围的时间日期去。 我最近在博客这件事,只是建议升级或安装蛋糕库的新版本,所有的问题就走了。



Answer 6:

请使用下面的代码

我们/etc/nginx/sites-available/domainname.com

server { 
server_name  cakeapp.example.com;
root   /var/www/vhosts/cake/app/webroot;
access_log  /var/log/nginx/cakeapp.access.log;
error_log   /var/log/nginx/cakeapp.error.log;

listen       80;
rewrite_log on;

# rewrite rules for cakephp
location / {
    index  index.php index.html;

    # If the file exists as a static file serve it 
    # directly without running all
    # the other rewite tests on it
    if (-f $request_filename) { 
        break; 
    }
    if (!-f $request_filename) {
        rewrite ^/(.+)$ /index.php?url=$1 last;
        break;
    }
}

location ~* \favicon.ico$ {
    expires 6m;
}
location ~ ^/img/ { 
    expires 7d; 
} 

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SERVER_NAME $host;
}

location ~ /\.ht {
    deny  all;
}

}

它为我工作。



文章来源: How do I configure nginx rewrite rules to get CakePHP working on CentOS?