IIS中子目录Angular应用403错误及URL重定向解决方案咨询
这个问题我太熟悉了!当你访问不带尾斜杠的http://host-url/beta时,IIS会把beta当成一个文件去查找,而不是识别为你的Angular应用程序目录,所以才会返回403 Forbidden。下面给你两种实用的解决办法,优先推荐第一种,适配性最强:
方法1:使用IIS URL重写模块(推荐)
这是最灵活可靠的方案,需要用到IIS的URL重写模块:
- 第一步:确认你的IIS已经安装了URL重写模块。如果没装,打开服务器管理器的「角色和功能」添加,或者用Web平台安装器搜索「URL Rewrite」安装即可。
- 第二步:打开IIS管理器,找到你的
beta应用程序,在功能视图里双击「URL重写」。 - 第三步:点击右侧操作栏的「添加规则」,选择「空白规则」,然后按以下配置:
- 规则名称:随便起个好记的,比如「Add Trailing Slash for Beta App」
- 匹配URL:
- 请求路径:选择「Matches the Pattern」
- 匹配类型:「Regular Expressions」
- 模式:
^beta$(如果你的应用虚拟路径不是beta,替换成实际名称) - 忽略大小写:勾选
- 条件:
- 点击「添加」,条件输入
{REQUEST_FILENAME},检查输入选「Is Not a File」 - 再添加一个条件:同样输入
{REQUEST_FILENAME},检查输入选「Is Not a Directory」
- 点击「添加」,条件输入
- 操作:
- 操作类型:「Redirect」
- 重定向URL:
/beta/(替换成你的应用路径) - 重定向类型:推荐选「Permanent (301)」,对SEO更友好;临时跳转选「Temporary (302)」也可以
- 勾选「追加查询字符串」(如果需要保留原URL的查询参数)
- 第四步:点击「应用」保存规则,然后测试访问
http://host-url/beta,应该会自动跳转到带尾斜杠的版本了。
快捷方式:直接修改web.config文件
如果不想用GUI操作,也可以直接在beta应用的根目录下的web.config里添加重写规则(记得保留Angular原本的路由重写规则,不然刷新页面会404):
<configuration> <system.webServer> <rewrite> <rules> <!-- 新增的尾斜杠重定向规则 --> <rule name="Add Trailing Slash" stopProcessing="true"> <match url="^beta$" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Redirect" url="/beta/" redirectType="Permanent" /> </rule> <!-- Angular路由重写规则,必须保留 --> <rule name="Angular Routes" 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> </system.webServer> </configuration>
方法2:开启目录浏览(局限性较大,不推荐)
如果暂时不想用URL重写模块,也可以试试这个临时方案,但适配性不如第一种:
- 打开IIS管理器,找到
beta应用程序,在功能视图里双击「目录浏览」,然后点击右侧的「启用」。 - 同时确保站点的「默认文档」设置里,
index.html排在最顶部。
这个方法的原理是:当访问不带尾斜杠的路径时,IIS会先尝试列出目录(如果允许),然后自动跳转到带尾斜杠的版本。但如果目录浏览被禁用,或者服务器安全策略不允许开启,这个方法就失效了,所以还是优先用URL重写的方案。
最后提醒一下:测试前最好清空浏览器缓存,因为301永久重定向会被浏览器缓存,可能影响测试结果哦!
内容的提问来源于stack exchange,提问作者Arvind Maheshwari
相关产品推荐
相关产品推荐

