2014-04-26 77 views
2

我想設置一個Nginx服務器配置來從子文件夾提供CakePHP安裝。Nginx與CakePHP子文件夾中不提供靜態文件(CSS,JS,IMG)

所以我用一個子文件夾都將URL以及在系統上。現在,我花了一段時間來確定CakePHP正確處理哪些請求的配置。這意味着它正確地引導和處理控制器。

什麼不工作然而,從webroot目錄服務靜態文件(例如* .css文件),那些都解釋爲CakePHP的控制器導致CssController could not be found.錯誤。

我site.conf:

server { 
    listen *:80; 
    listen *:443 ssl; 
    server_name sub.domain.com; 
    ssl_certificate ./ssl/domain.crt; 
    ssl_certificate_key ./ssl/domain.key; 

    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 

    if ($ssl_protocol = "") { 
    rewrite^ https://$server_name$request_uri? permanent; 
    } 

    root /var/www/domain/sub/cakefolder/; 
    autoindex off; 
    index index.php; 

    location /cakefolder { 
    root /var/www/domain/sub/cakefolder/app/webroot/; 
    try_files $uri $uri/ /cakefolder/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; 
    } 

如何阻止來自Nginx的通過FastCGI的PHP解釋器路由現有的靜態文件嗎?

基於https://stackoverflow.com/a/22550332/671047我已經嘗試過更換我location /cakefolder { ... }


location ~ /cakefolder/(.*) { 
    try_files /cakefolder/$1 /cakefolder/$1/ /cakefolder/index.php?$args; 
} 

但是這會導致一個重定向循環導致HTTP 500錯誤。

解決方案(感謝皮特!):

我發現下面的附加指令是工作爲這個特定的設置。這可能不是最優雅的解決方案,但誰在乎,很高興現在正在工作。


location ~* /cakefolder/(.*)\.(css|js|ico|gif|png|jpg|jpeg)$ { 
    root /var/www/domain/sub/cakefolder/app/webroot/; 
    try_files /$1.$2 =404; 
} 

回答

2

你可以及早發現它:

  location ~* \.(css|js|ico)$ { 
        try_files $uri =404; 
      } 

我有一個類似的設置和工作對我來說,當我經歷了同樣的事情,我不會說謊,我從來沒有(只是沒有蛋糕。)理解爲什麼try_files w/redirect總是在現有的靜態文件上失敗,其中拋出像^之類的try_files找到文件np。關於這個的想法? (也許今天是源讀的一天)

+0

謝謝老總!有了這個指令,我得到了一個404,這至少意味着請求被正確地過濾,阻止它們被CakePHP處理。見上面我的完整解決方案。 – Thorben

+0

如果你可以從你的404發佈記錄的錯誤,我想查看它嘗試的文件 – pete