Назад | Перейти на главную страницу

сгенерированный файл .css в nginx

Я разработал на apache, теперь мне нужно развернуть на ngix, и я столкнулся с некоторыми трудностями. Поскольку в моем проекте встроенные стили отключены (с помощью cakephp) и в базе данных определены некоторые цвета, я сделал RsrcController, генерирующий CSS с цветами в шаблоне.

Вызов этой функции работает только в том случае, если я использую не расширение файла .css, а только сокращенный URL-адрес с контроллером и функцией.

Если я добавлю файл с окончанием .css, nginx будет искать в корневой папке и вернет ошибку 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. Затем есть несколько варов (пользователь ...), и в конце мне нужен ".css".

Я подумал о том, чтобы переписать URl на такой же, но без расширения файла ".css". Есть ли способ обойтись без регулярных выражений?

Вы также можете сделать это так:

location ~ ^(/rsrc/css_vars/.+)\.css$ {
    rewrite ^ "$1" last;
}

Это немного более эффективно, поскольку мы запускаем механизм регулярных выражений только один раз и захватываем нужную часть в location директива. Я также изменил это, чтобы не совпадать /rsrc/css_vars/.css путь, так как * версия также совпала бы с ним.

Я реализовал следующее решение:

#special for rsrc controller
location ~ ^/rsrc/css_vars/.*\.css$ {
   rewrite "^(.+)\.\w+$" "$1" last;
}

Это уберет .css из запроса, если запрос предназначен для контроллера rsrc и функции css_vars.