Возможно, 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;