Apache的文档很清楚地表明, mod_rewrite应该只是最后一招。 对于nginx ,陷阱部分有request_uri基本不变的例子。
情况是这样的:
ProxyPass规则(大量的代理工作)。 我希望将所有这些都转换为nginx ,因为据我所知, nginx在代理中更具性能。 http://my.site/muru和http://my.site/~muru代理到http://other.server/~muru ,但http://other.server/muru不存在)。 http://my.site/local-club : http://my.site/local-club将被代理到http://my.site/~local-club )。 我的主要问题是:
rewrite或location与returnredirectB到A请求,或继续代理? redirect(和return )具有清楚地指示两个目录之间的关系的好处。
我的rewrite规则如下所示:
rewrite ^/B(/.*) /A$1 permanent;
和return规则:
location ~ ^/B(/.*) { return 301 /A$1; }
附:
location ~ ^/~(A|D|E|F..)/ { proxy_pass https://other.server; proxy_redirect default; }
如果你的nginx服务器每秒处理数以千计的请求,并且你想避免每个请求花费CPU时间来重写正则expression式匹配,那么这并不重要。 现在,我想用最明确的方式来编写configuration文件,直到达到此限制,那么如果您没有足够的预算来扩展您的基础架构,那么就应该考虑欺骗您的configuration以适应您的stream量。 返回的缺点是,如果你有多个redirect,你最终将得到一个包装一个返回指令的位置。 使用重写,可以将其中的多个包装在一个通用位置,并在第一个参数中testing更具体的模式。
更新:通用位置中的多redirect示例:
location /B { rewrite ^/B/foo/(.*)$ /A/newfoo/$1 permanent; rewrite ^/B/bar/(.*)$ /A/newbar/$2 permanent; rewrite ^/B/(.*)$ /A/$1 permanent; }