如何覆盖在Nginx上运行的wordpress中某些URL的expires头

时间:2016-01-08 13:19:13

标签: php wordpress nginx header

我在Nginx平台上运行wordpress,并分别在.php和静态资源上设置了expires标头。但现在要求是使用nginx将自定义过期标题添加到wordpress中的某些URL。我尝试添加位置块但似乎被.php块

中写的expires头覆盖

我创建了一个名为sports的wordpress页面,并希望提供没有过期标题的网址,其余的网址过期标题应为10分钟

我的配置供参考:

server {
    listen     0.0.0.0:80;                # your server's public IP address
    server_name  www.abc.com;                   # your domain name
    index index.php index.html ;
    root         /srv/www;  # absolute path to your WordPress installation
    set $no_cache 0;
    try_files $uri $uri/ /index.php;




 location ~*^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|css|woff|js|rtf|flv|pdf)$ {
                access_log off; log_not_found off; expires 365d;
        }


  location / {
                try_files $uri $uri/ /index.php?$args;
                 expires       modified +10m;

        }

 location ~ .php$ {
                try_files $uri /index.php;
                include fastcgi_params;
                fastcgi_pass   127.0.0.1:9000;
set $no_cache 0;
add_header    Cache-Control  public;
expires       modified +10m;

}

location ~* /sports
{
    expires -1;
}
}

1 个答案:

答案 0 :(得分:0)

/sports/之类的URI实际上已使用包含值/index.php的参数路由到$request_uri。在nginx .php内,这些全部expires位置块处理,并使用该块中的expires指令的值和单独的块。

一种可能的解决方案是使location ~ \.php$ { expires $expires; ... } 指令的值为变量:

map

根据原始请求URI($request_uri)创建map $request_uri $expires { default off; ~^/sports +10m; } server { ... } 个值:

map

请注意,http指令位于server块或与.ppsRightCol p { display: none; } 块相同的级别。

有关详细信息,请参阅thisthis