Php

cakephp & nginx 配置/重寫規則

  • November 10, 2012

嗨,有人請幫幫我,我也在 stackoverflow 上問過這個問題,但沒有得到太多回應,並且正在爭論它是程式還是伺服器相關。

我正在嘗試在使用 Fact CGI 執行 Nginx 的 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

問題是這些重寫假設你直接從 webroot 中執行 cake,這不是我想要做的。我對每個站點都有一個標准設置,即每個站點一個文件夾,其中包含以下文件夾日誌、備份、私人和公共。公共場所 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;
   }

}

現在就像我說的那樣,我可以看到 cake 的主要 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;
   }

}

引用自:https://serverfault.com/questions/32070