今天在配置 Nginx 的时候写了这么一个 location
location /a { rewrite /a/(.*) /$1 break; ... }
然后发现当我直接访问 /a 的时候,rewrite 并没有生效,后端收到的还是 /a 而不是我想象中的 / 。想了想可能是结尾 / 的问题,于是这样改:
location /a { rewrite /a(.*) $1 break; ... }
结果新的问题来了,由于这样匹配到的 $1 是空的,所以 Nginx 报错了,the rewritten URI has a zero length
所以这种情况下只好这么写:
location /a/ { rewrite /a(.*) $1 break; ... }
注意第一行的末尾 / 。这种情况下,访问 /a 会被 Nginx 自动重定向到 /a/ ,然后重写之后的 uri 就是 /,问题解决。
nginx rewrite 的一个小坑 by 桔子小窝 is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.