前端项目通过‘URL 重写’部署在 IIS 中,访问 WebAPI 接口
〇、前言
在前端项目开发时,我们可以通过配置代理 proxy 来访问本地或者是远程接口,但是部署后代理就失效了。如果项目部署在 IIS 上,就没法去对应到指定接口,此时就需要 IIS 中的‘URL重写’功能,来对应要访问的目标地址。
本文将简单介绍下‘URL重写’功能模块的安装、配置,以及日常遇到的问题解决方案。
一、安装‘URL重写’功能模块
如下图标,IIS 中是默认不安装的,需要用户手动安装。安装步骤参考以下三步:

1/3 首先是检查 IIS 中是否有‘Web 平台安装程序’,图标如下图:(用来确认和安装 ARR)

若没有需要去官网下载安装包,直接安装即可。官网地址: ARRv3_0.exe 下载地址
安装成功后,需要重新打开 IIS。
2/3 然后打开‘Web 平台安装程序’,输入‘arr’搜索:

搜索结果,默认情况下,ARR 安装完成后,会如下所示,已经安装了 2.5 版本:

如果没有默认安装需要手动安装,先添加,再安装,最后推荐下载自行安装,直接系统安装也是可以的,如果没成功,就多是两次。

3/3 最后需要配置下 ARR,如下图中的步骤:最后需勾选 Enable Proxy。

此时,再重新打开一下 IIS,即可看到久违的‘URL重写’了。
二、通过‘URL重写’配置入站规则
注意:需要点选 IIS 主目录,来配置‘URL重写’。
添加规则->空白规则,如下:

编辑对应的值:

正则表达式:^(.*?)apitest/(.*)$
可以通过‘测试模式’功能,来测试正则表达式是否准确。
重写地址:http://localhost:55046/api/{R:2}
{R:2} 代表匹配成功的字符串后边的全部内容,并允许附加查询字符串。
举个栗子:
若请求地址为:http://xxxxxxx:1001/apitest/testcontrallor/testmethod?para=10
经重写后的地址:http://localhost:55046/api/testcontrallor/testmethod?para=10
三、报错处理:HTTP 400.605
根据错误页面的提示信息,可以看出是 ARR(ApplicationRequestRouting) 模块的报错。

其中一个原因就是,入站规则配置有问题,导致请求无限循环,比如规则是拦截‘/api/’,重写地址中也包含了‘/api/’就会引起无限循环,导致请求无法命中。
四、部署完成后刷新页面时出现 404
在根目录下添加文件 web.config,并将如下 HTML 代码填入并保存。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="CHRoutes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/index.html" />
</rule>
</rules>
</rewrite>
<handlers>
<add name="SSL-html" path="*.html" verb="*" modules="ServerSideIncludeModule" resourceType="File" />
</handlers>
</system.webServer>
</configuration>
注:如果有问题欢迎留言讨论,众人拾柴火焰高。
部分参考:前后端分离-IIS部署Vue前端项目
在IIS和Nginx上通过代理部署基于ant-design-pro前端框架开发的应用
前端项目通过‘URL 重写’部署在 IIS 中,访问 WebAPI 接口的更多相关文章
- UrlRewrite(URL重写)--ASP.NET中的实现
概述 今天看了下URL重写的实现,主要看的是MS 的URL Rewrite. URL重写的优点有:更友好的URL,支持老版本的URL URL重写的缺点有:最主要的缺点是性能低下,因为如果要支持无后缀的 ...
- 无法用Put方式请求发布在IIS中的WebAPI
WebApi程序发布到IIS上后,无法使用Put的方式进行请求,错误信息如下: 原因和解决方案: 在IIS中默认不支持Put请求和Delete请求,因为IIS中注册的Web ...
- ASP.NET项目使用MYSQL数据库部署到IIS服务器找不到请求的.Net Framework Data Provider解决方案
使用MySQL开发过程中在自己的机器上跑项目是没有问题的,但在实际部署到服务器上的时候就发生“找不到请求的.Net Framework Data Provider解决方案”错误,在排除项目本身原因之后 ...
- Umbraco部署到IIS中权限问题(back office没有权限新建template)
在开发项目中,发现把基于Umbraco平台开发的网站部署到服务器的IIS之后,访问该网站的back office 在back office中增加一个template时,发送错误,提示 Access t ...
- Tomcat 配置 项目 到tomcat目录外面 和 域名绑定访问(api接口、前端网站、后台管理网站)
先停止tomcat服务 1.进入apache-tomcat-7.0.68/conf/Catalina/localhost(如果之前还都没有启动过tomcat,是不会有此目录的,先启动一次再关闭,会自动 ...
- nginx搭建前端项目web服务器以及利用反向代理调试远程后台接口
前端同学用nginx搭建自己的web服务器,后台程序专门部署在一台服务器上(我们之前公司就有三套环境,开发/测试/生产),这样做的好处是 1.前端代码基本都是静态文件,重启一次很快,也就几秒钟时间. ...
- Web应用程序与Web网站及部署在IIS中
在Visual Studio可以创建 Web 应用程序项目或网站项目.通过选择 新建项目 或 打开项目 创建或打开一个 Web 应用程序项目在Visual Studio 文件 菜单. 通过选择 新建网 ...
- 关于asp.net core部署到iis中出现 HTTP Error 502.5 - Process Failure的问题
环境是windows Server2008R2 出现这个问题搞了一下午都没解决,最后又加班才算搞定,由于英文不太好,官方的文档看了好几遍,也按照文档做的,但还是出现这个问题,百度google搜了很多解 ...
- asp.net core部署到iis中出现 HTTP Error 502.5 - Process Failure的问题
环境是windows Server2012 问题的原因是缺少文件:api-ms-win-crt-runtimel1-1-0.dll, dotnet 启动程序失败. 解决方案1: 安装系统补丁: 20 ...
- IIS中访问自己开发的Webservice site就自动停止,尝试重启IIS和重启服务器都不能解决。
今天在加班的时候发现一个奇怪的问题,IIS里面我们自己开发的Webservice site一访问就自动停止.尝试重启IIS和重启服务器都不能解决.后台windows events报错信息是The Mo ...
随机推荐
- Java代码审计之不安全的Java代码
Java代码审计之不安全的Java代码 在打靶场的同时,需要想一下如果你是开发人员你会怎样去防御这种漏洞,而作为攻击方你又怎么去绕过开发人员的防御. 环境搭建 https://github.com ...
- Skype for Business server 数据库安装
之前安装了SFB 2015标准版,但是没有安装归档据库,现在打算重新安装.环境中安装的是默认自带的SQL EXPRESS. 继续安装向导,安装SQL数据库.但是在最后的时候遇到了问题. 安装向导报错 ...
- 邮箱的代理发送Send as权限不生效
邮箱的代理发送Sendas权限不生效 最近,有需求为用户添加其它邮箱的代理发送Sendas权限.在Exchange的管理单元里添加完毕后,发现没有效果,客户端提示你没有权限以用户的名义发送邮件 ...
- fabric compose文件解读(CA篇)
CA在fabric中的作用是:分配证书,实现身份认证,配普通的CA机构没什么区别(所以可以用其他CA机构颁发的证书,只要商量好就行) 我的一段CA的conpose文件 1 services: 2 ca ...
- Java开发学习(三十四)----Maven私服(二)本地仓库访问私服配置与私服资源上传下载
一.本地仓库访问私服配置 我们通过IDEA将开发的模块上传到私服,中间是要经过本地Maven的 本地Maven需要知道私服的访问地址以及私服访问的用户名和密码 私服中的仓库很多,Maven最终要把资源 ...
- 修改Windows10 命令终端cmd的编码为UTF-8 && IDEA控制台输出中文乱码
临时修改 进入cmd窗口后,直接执行 chcp 65001 永久修改 在运行中输入regedit,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Pro ...
- EasyExcel实现文件导入
导入 准备工作 见:https://www.cnblogs.com/wywblogs/p/16095576.html 异步导入 接口代码 public Map importMemberList(@Re ...
- Javascript 手写 LRU 算法
LRU 是 Least Recently Used 的缩写,即最近最少使用.作为一种经典的缓存策略,它的基本思想是长期不被使用的数据,在未来被用到的几率也不大,所以当新的数据进来时我们可以优先把这些数 ...
- 《MySQL自传》
撰写本文查阅了大量参考资料,也得到很多朋友的指点帮助,特别感谢: Jimmy Yang--阿里云数据库研究员,原Oracle InnoDB Architect. 彭立勋--华为云数据库总工程师,MyS ...
- struts.xml 中用OGNL表达式取不到中文文件名的原因
在struts2中xml配置如下,以execl文件为例: <result name="success" type="stream"> < ...