考虑以下 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 配置文件中的语句分隔符。