Сгенерированный файл.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 путь, так как * версия соответствовала бы этому также.

Другие вопросы по тегам