首页 > 软件服务 > WEB软件 > IIS的web.config的Rewrite规则转换nginx规则

IIS的web.config的Rewrite规则转换nginx规则

WEB软件

一、问题情况

遇到一个IIS的web.config的rewrite的规则转换nginx规则的问题

二、解决办法

首先可以用个现成的工具转换一下rewrite规则:https://www.toolnb.com/tools/rewriteTools.html

例如:

转换后

但是上面有两点问题,就是iis里的rewrite规则^后直接跟路径不需要写/,转换后的nginx规则也就没有/开头.可以自己补齐一下,还有就是{HTTP_HOST}这类的变量转换不对修正下:

测试后发现又遇到一些新问题

APACHE里301和302跳转转nginx规则会变成last,也需要修正,还有APACHE的NC忽略GBK字符转换中文,这个IIS的URL REWITE无法实现这个,开了双重字符转义也不正常,最后还是用了IIS的ISAPI_REWRITE才可以用NC方法.

IIS下直接写域名重写以后是浏览器里依旧显示当前访问的url,实际内容被反代到重写的域名地址上的(安装了Application Request Routing(ARRv3.0)).但是nginx里rewrite如果后面写域名的话,实际是302重定向跳转到了域名地址上去.而不是反代.查了下nginx的rewrite的last只对相对地址才进行重写,尝试了break也是一样的.如果写了域名默认就只能302重定向跳转了.这样肯定不符合我们的要求.所以需要改造一下:

反代proxy_pass地址可以参考:https://blog.csdn.net/u010433704/article/details/99945557

如果需要参数数值用于变量,正则匹配变量的方法:http://t.zoukankan.com/chenjw-note-p-14388257.html
或者直接rewrite里匹配需要的参数也可以:https://blog.csdn.net/aerchi/article/details/84068768

这样就可以实现像IIS那样直接写域名的重写反代操作了.需要的可以参考下