nginx 可能为带有 php 标签的 .css 文件提供了错误的文件类型

nginx 可能为带有 php 标签的 .css 文件提供了错误的文件类型

今天 NGINX 又给我提了很多问题 :)

像往常一样,我已经尝试了一段时间,但似乎无法解决这个问题:

我刚刚将 NGINX 配置为处理与 .php 文件相同的 .css 文件(以解析 CSS 文件中的 PHP 标签)。这非常有效,文件被找到并传送。

我可以使用 FIrebug 进行调试,一切正常(它显示打开的标签内的 .css 内容<link>)。所以,一切正常,对吗?错了。

它有 CSS,但它不解释它!我的意思是:显然,CSS 的文件类型(或应用程序类型,无论什么)是错误的。页面可以访问 CSS,但根本不会真正使用它。

我检查/尝试过的内容:

  • .css 文件中没有 PHP 错误,因此该错误不成立
  • .css 是可访问的。我可以手动调用 URI,或者检查包含的 URL 是否找到它:两者都有效
  • .css 没有语法错误(我切换到了只有body {background-color: #000; }
  • 无需 NGINX 即可工作
  • 我删除了浏览器缓存/在配置重写后重新启动了 NGINX

这里是配置:

server {
        listen      80;
        server_name localhost;

        access_log  /var/log/nginx/board.access_log;
        error_log   /var/log/nginx/board.error_log warn;

        root        /var/www/board/public;

        index       index.php;
        fastcgi_index   index.php;

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

        location ~ (\.php|\.css)$ {
            try_files $uri =404;

            include /etc/nginx/fastcgi_params;
            #keepalive_timeout 0;           
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_pass    127.0.0.1:7777;
        }
    }

Firebug‘网络’响应标头:

Connection  keep-alive
Content-Encoding    gzip
Content-Type    text/html
Date    Sat, 16 Jun 2012 10:08:40 GMT
Server  nginx/1.0.5
Transfer-Encoding   chunked
X-Powered-By    PHP/5.3.6-13ubuntu3.7

我想我刚刚回答了我自己的问题。Content-Type text/html 是问题吗?我该如何删除它?

我个人的猜测是我必须以某种方式使用它

include /etc/nginx/mime.types;
default_type application/octet-stream;

但我不确定...有人知道如何解决这个问题吗?

TLDR;CSS 文件已正确交付,但它似乎没有被浏览器“用作”CSS。(已测试,适用于 Apache)

答案1

您可以尝试添加

<?php
  header('Content-Type: text/css');
?>

(可选编码)到您的 php 解析的 css 文件中。这必须作为第一条指令发生(更准确:在任何输出发生之前;如果在调用之前发生任何输出,php 将对您出错header()),且其前面不能有任何空格。

这将把给定的 HTTP 标头与内容一起发送,该内容应该正是您想要的。

答案2

header()您可以通过 PHP 的函数或 nginx 的add_header配置选项设置正确的标头。

正如 Jonas Wielicki 已经提到的,使用 PHP,您可以通过添加来设置正确的标头

<?php header("Content-Type: text/css"); ?>

在发送任何输出之前,将其保存到您的文件中。

另一种方法是添加add_header 配置选项到你的 nginx 配置的相应部分,在你的例子中:

add_header Content-Type text/css;

相关内容