Возможно, nginx выдал неправильный тип файла для файла.css с тегами php

И снова - NGINX дает мне много вопросов сегодня:)

Как всегда, я уже пробовал некоторое время, но не могу решить эту проблему:

Я просто настроил NGINX для обработки моих файлов.css, равных моим.php-файлам (для анализа тегов PHP внутри файла CSS). Это прекрасно работает, и файл найден и доставлен.

Я мог бы отладить его с помощью FIrebug, и все в порядке (он отображает содержимое.css внутри открытого <link> тег). Итак, все работает, верно? Неправильно.

У него есть CSS, но он его не интерпретирует! Что я имею в виду под этим: очевидно, тип файла CSS (или тип приложения, что угодно) является неправильным. Страница может получить доступ к CSS, но вообще не беспокоится о том, чтобы ее использовать.

Что я проверял / пробовал:

  • Внутри.css нет ошибок PHP, так что
  • .Css доступен. Я могу вызвать URI вручную или проверить, находит ли включенный URL его: оба работают
  • .Css не имеет синтаксических ошибок (я перешел на 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)

2 ответа

Вы можете попробовать добавить

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

(необязательно с кодировкой) в ваш CSS-файл, проанализированный php. Это должно произойти как первая инструкция (точнее: до того, как произойдет какой-либо вывод; php выдаст ошибку, если какой-либо вывод произошел до вызова header()) и перед ним не должно быть пробелов.

Это отправит заголовок HTTP вместе с контентом, который должен делать именно то, что вы хотите.

Вы можете установить правильный заголовок либо через PHP header() функция или через nginx's add_header Вариант конфигурации.

Как уже упоминал Йонас Велицкий, используя PHP, вы устанавливаете правильный заголовок, добавляя

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

в ваш файл, прежде чем отправить какой-либо вывод.

Другой способ - добавить опцию конфигурации add_header в соответствующий раздел вашей конфигурации nginx, в вашем случае:

add_header Content-Type text/css;
Другие вопросы по тегам