我已将以下规则添加到我的 nginx.conf 文件中
rewrite ^/top100/Armin%20van%20Buuren/(.*)$ http://www.example.com/armin-van-buuren/$1 redirect;
rewrite ^/top100/armin-van-buuren/(.*)$ http://www.example.com/armin-van-buuren/$1 redirect;
rewrite ^/top100/(.*)$ http://www.example.com/$1 redirect;
对于第一条规则,它会重定向www.example.com/top100/Armin%20van%20Buuren/
到www.example.com/Armin%20van%20Buuren/
其他 2 条规则运行正常。我这里搞砸了什么?
答案1
Nginx 使用内部规范化的 URI:
匹配是针对规范化的 URI 执行的,在解码以“%XX”形式编码的文本、解析对相对路径组件“。”和“..”的引用以及将两个或多个相邻的斜线压缩为一个斜线之后。
使用(单引号或双引号)包裹字符串中的空格。
因此它将是:
rewrite "^/top100/Armin van Buuren/(.*)$" /armin-van-buuren/$1 redirect;