我遇到了nginx的sub_filter
重写规则无法处理CSS文件的问题。我在路径(/site
)上提供内容,并且需要JS和&amp ;;中的所有网址。 CSS要正确加上前缀。
我在CSS中链接时指定了mime类型。从模板:
<link href="/static/css/site.css" type="text/css" rel="stylesheet" />
nginx已启用子过滤器,并且我已明确指定包含text/css
:
location /site {
access_log /opt/logs/test/nginx-access-site.log combined if=$loggable;
error_log /opt/logs/test/nginx-errors-site.log error;
rewrite ^(/site)$ $1/;
rewrite ^/site(.+) $1 break;
sub_filter "test.domain.tld" "test.domain.tld/site";
sub_filter "'/" "'/site/";
sub_filter '"/' '"/site/';
sub_filter "http:" "https:";
sub_filter_types text/html text/css text/javascript;
sub_filter_once off;
include proxy_params;
proxy_pass http://site_test$1$is_args$args;
proxy_redirect http://test.domain.tld/ https://test.domain.tld/site/;
}
正确地重写对CSS文件的引用。从HTML输出:
<link href="/site/static/css/site.css" type="text/css" rel="stylesheet" />
问题是它没有在CSS文件中重写,因此图像路径不正确:
.sortable th .asc {
background-image: url("/static/img/up_arrow.gif");
}
我尝试过度宽容而没有任何区别:
sub_filter_types *;
我是否误解了sub_filter
的使用?我认为因为CSS是由nginx直接提供的,所以它也会被重写。
答案 0 :(得分:2)
我在一些搜索后找到了解决方案并且浪费了一些时间尝试了一些不起作用的解决方案,所以希望这有助于其他人搜索并找到这篇文章。
显然,默认情况下,sub_filter仅适用于text / html。我尝试了各种其他选项来启用像这样的text / javascript text / css,但哪些不起作用:
sub_filter_types text/xml text/css text/javascript;
最后通过过滤所有类型来实现它:
sub_filter_once off;
sub_filter_types *;
请记住重新启动nginx并记住清除浏览器中的缓存。