在 nginx 中生成的 .css 文件

在 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”。有没有办法绕过正则表达式?

答案1

我实施了以下解决方案:

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

如果请求针对的是 rsrc 控制器和函数 css_vars,这将从请求中删除 .css。

答案2

你也可以这样做:

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

这样效率更高一些,因为我们只触发一次正则表达式引擎,并捕获指令中所需的部分location。我还将其更改为不匹配/rsrc/css_vars/.css路径,因为*版本也会匹配它。

相关内容