Сгенерированный файл.css в nginx
Я разработал на 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. Чем есть некоторые vars (user...) и в конце мне нужен ".css".
Я думал переписать URl к тому же, но без расширения файла.css. Есть ли способ обойти регулярные выражения?
2 ответа
Я реализовал следующее решение:
#special for rsrc controller
location ~ ^/rsrc/css_vars/.*\.css$ {
rewrite "^(.+)\.\w+$" "$1" last;
}
Это отрежет.css от запроса, если запрос для контроллера rsrc и функции css_vars.
Вы также можете сделать это так:
location ~ ^(/rsrc/css_vars/.+)\.css$ {
rewrite ^ "$1" last;
}
Это немного более эффективно, так как мы запускаем механизм регулярных выражений только один раз и фиксируем необходимую часть в location
директивы. Я также изменил это, чтобы не соответствовать /rsrc/css_vars/.css
путь, так как *
версия соответствовала бы этому также.