Nginx
在 nginx 中生成 .css 文件
我在 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
路徑,因為*
版本也會匹配它。