我需要有关 nginx 重写旧链接的快速帮助。
旧链接:http://widgets.domain.com/person/106400.jpg
新链接:http://xxxxxxx.cloudfront.net/old/widgets/106400.jpg
谢谢!
我相信你需要重定向而不是重写,因为域完全改变,这是所有
jpg
文件的简单重定向规则,如果有更好的匹配告诉我,我会改变我的答案。
server {
server_name widgets.example.com;
location ~ \.jpg$ {
return 301 http://example.cloudfront.net/old$request_uri;
}
}
编辑:删除
/person
的编辑
server {
server_name widgets.example.com;
location ^~ /person/(.*\.jpg) {
return 301 http://example.cloudfront.net/old/widgets$1;
}
}
给定答案的唯一问题是浏览器缓存 301 重定向的时间长短取决于浏览器的类型。
例如,如果您正在运行多个 CDN 并且想要切换到新的 CDN,则需要在 NGINX AND Cloudfront 上对新 CDN 进行 301,或者在缓存中拥有该 CDN 的用户只需要记住 301->云前。
据我所知,NGINX 中还有另外两种方法可以避免此问题:
如果您确切知道要替换什么,可以使用 ngx_http_sub_module
如果您想在替换中使用正则表达式或模式匹配,您可以使用名为 Substiutions
的社区模块