Я разработал на 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.