Nginx

在 nginx 中生成 .css 文件

  • September 2, 2016

我在 apache 上開發,現在我需要在 ngix 上部署,我遇到了一些困難。因為在我的項目中禁用了內聯樣式(使用 cakephp)並且在數據庫中定義了一些顏色,所以我讓 RsrcController 生成帶有顏色的 css 到模板中。

僅當我不使用文件副檔名 .css,而僅使用帶有控制器和函式的斜線 Url 時,才呼叫此函式。

如果我附加以 .css 結尾的文件,則 nginx 將在 webroot 文件夾中搜尋並返回 404。

這是配置的相關部分:

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


       #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
       location ~ \.php$ {
          try_files $uri =404;
          include /etc/nginx/fastcgi_params;
          fastcgi_pass    127.0.0.1:9000;
          fastcgi_index   index.php;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       }

我試圖找到一個添加另一個位置規則的解決方案,如下所示:

location ~ rsrc/css_vars/~.css {
   ... [->second part of my question]
}

我不想將所有 .css 文件傳遞給 php。只是那些我希望是動態生成的。無論如何,我的更改似乎不起作用。

第二部分:

Cakephp 的工作方式如下:http : //url.com/controller/function/var1/var2/varx 我的控制器是 rsrc。我的函式是 css_vars。比有一些變數(使用者……),最後我需要“.css”。

我想將 URl 重寫為相同但沒有文件副檔名“.css”。有沒有辦法解決正則表達式?

我實施了以下解決方案:

#special for rsrc controller
location ~ ^/rsrc/css_vars/.*\.css$ {
  rewrite "^(.+)\.\w+$" "$1" last;
}

如果請求是針對 rsrc 控制器和函式 css_vars 的,這將從請求中刪除 .css。

你也可以這樣做:

location ~ ^(/rsrc/css_vars/.+)\.css$ {
   rewrite ^ "$1" last;
}

它更有效一點,因為我們只觸發一次正則表達式引擎,並在location指令中擷取所需的部分。我也將其更改為不匹配/rsrc/css_vars/.css路徑,因為*版本也會匹配它。

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