2016-11-16 624 views
2

我遇到nginx的sub_filter重写规则无法处理CSS文件的问题。我正在为路径(/site)上的内容提供内容,并且需要在JS & CSS中的所有URL都正确添加前缀。通过nginx的sub_filter在CSS和JS中重写路径

我在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

sub_filter_types *;用Nginx为我工作1.13.6