忽略 Nginx 位置标记内 URL 中不必要的部分

忽略 Nginx 位置标记内 URL 中不必要的部分

考虑以下 Nginx 配置文件(64 位 Linux 上的 Nginx 版本 1.2.6):

location / {
    root html/www.domain.com;
}
location /image/ {
    root html/static.domain.com;
}

使用这种配置,/index.html从 拾取html/www.domain.com/index.html/secure/profile.html从 拾取,html/www.domain.com/secure/profile.html/image/logo.jpeg从 拾取html/static.domain.com/image/logo.jpeg

但是,以下请求会导致错误(可以理解):

/index.html;affiliate=msn
/image/logo.jpef~partner=msnbc

什么是正确的 Nginx 配置才能忽略诸如;affiliate=msn和之类的 URL 部分~partner=msnbc

答案1

像这样

    location / {
        try_files $uri $uri/index.html =404;
    }
    location ~ "(.*)[;~].*" {
        try_files $1 $1/index.html =404;
    }

答案2

已按如下方式更改配置以获得所需的行为。

location /image/ {
    rewrite ^(/image/.*)[\;\,\~].*$ $1 break;
    root    html/static.domain.com;
}

请注意,分号必须转义(\;),因为它是 Nginx 配置文件中的语句分隔符。

相关内容