Nginx. Обработка css файлов интерпретатором php

Пожалуйста помогите с написанием регулярки в location для nginx.

Возникла необходимость обрабатывать файлы css из определенного каталога интерпретатором php. (пример: styles.css?423421423e3).

В .htaccess прописал:
<Files styles.css>
  ForceType application/x-httpd-php
  AddHandler application/x-httpd-php .css
</Files>

но nginx отдает файлы css в обход apache.

В конфиге nginx нашел локейшн:
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
root /var/www/myuser/data/www/site.ru;
access_log /var/www/httpd-logs/site.ru.access.log ;
access_log /var/www/nginx-logs/myuser isp;
}

и удалил из него css| - все заработало.

Но, теперь _все css файлы обрабатываются интерпретатором php. Как сделать так, что бы интерпретатор php обрабатывал файлы css только из определенного каталога (и его подкаталогов), а в других случаях эти файлы отдавались бы через nginx, как и раньше?
  • Вопрос задан
  • 4152 просмотра
Решения вопроса 1
AMar4enko
@AMar4enko
Во-первых непонятно сейчас, регулярка на типы файлов включена в какой-то свой location или прописана на самом верхнем уровне под server.
Я бы написал так
location '/assets/' {
    location '/assets/do-not-serve-css' {
        location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
           root /var/www/myuser/data/www/site.ru;
           access_log /var/www/httpd-logs/site.ru.access.log ;
           access_log /var/www/nginx-logs/myuser isp;
        }
    }
    location '/assets/feel-free-to-serve-css' {
        location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
           root /var/www/myuser/data/www/site.ru;
           access_log /var/www/httpd-logs/site.ru.access.log ;
           access_log /var/www/nginx-logs/myuser isp;
        }
    }
}

Такой механизм изоляции regexp-локаций рекомендует использовать Игорь Сысоев, разработчик nginx.
Согласно моему конфигу, если вы запросите css-file по адресу /assets/do-not-serve-css/any.css, то он не будет отдан через nginx и вы должны будете прокинуть обработку такого файла куда-то дальше. Если по адресу /assets/feel-free-to-serve-css/any.css, то он будет отдан nginx-ом
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Anonym
@Anonym
Программирую немного )
Верните в location css как было, а для вашего каталога пропишите новый location.
location ~* ^\/path\/to\/folder\/(.+)\.css$ {
    # Ваш конфиг обработчика php
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы