IIS部署站点根路径访问时jquery文件404错误排查求助
问题原因分析
访问站点根路径https://abc.xyz.com/emrsso时,浏览器地址栏未自动添加末尾斜杠/,此时浏览器会将emrsso识别为文件名而非目录,导致页面中相对路径Scripts/jquery-3.4.1.min.js被解析为根域名下的https://abc.xyz.com/Scripts/jquery-3.4.1.min.js,触发404错误。
而直接访问https://abc.xyz.com/emrsso/SSOLogin.aspx时,URL明确包含目录层级,相对路径会正确解析到emrsso目录下的Scripts文件夹;Visual Studio调试时,内置服务器会自动处理路径解析逻辑,因此不会出现该问题。
解决办法
方法1:使用ASP.NET根路径标记~(推荐)
修改ASPX页面中的jQuery引用,用~代表应用根目录,并添加runat="server"让ASP.NET自动解析为正确路径:
<script src="~/Scripts/jquery-3.4.1.min.js" runat="server" type="text/javascript"></script>
~会被ASP.NET解析为当前应用的虚拟路径/EMRSSO,最终生成的HTML会是正确的/EMRSSO/Scripts/jquery-3.4.1.min.js,无论访问路径是否带斜杠都能正常加载。
方法2:配置IIS自动添加末尾斜杠
通过IIS的URL重写模块添加规则,让不带斜杠的根路径自动重定向到带斜杠的路径:
- 打开IIS管理器,找到目标站点的
EMRSSO应用 - 进入URL重写模块,点击添加规则
- 选择空白规则,配置如下:
- 名称:添加末尾斜杠
- 匹配URL:
- 请求路径:
Matches the Pattern - 模式:
^emrsso$(根据实际虚拟路径调整) - 忽略大小写:勾选
- 请求路径:
- 条件:
- 输入:
{REQUEST_FILENAME} - 匹配类型:
Is Not a File - 逻辑分组:
Match All
- 输入:
- 操作:
- 操作类型:
Redirect - 重定向URL:
{REQUEST_URI}/ - 重定向类型:
Permanent (301)
配置完成后,访问https://abc.xyz.com/emrsso会自动跳转到https://abc.xyz.com/emrsso/,相对路径解析即可恢复正常。
- 操作类型:
方法3:使用绝对路径
直接在引用中写完整的虚拟路径:
<script src="/EMRSSO/Scripts/jquery-3.4.1.min.js" type="text/javascript"></script>
这种方式简单直接,但如果后续虚拟路径发生变更,需要手动修改所有相关引用,灵活性较差。
内容的提问来源于stack exchange,提问作者Sup Ravi Kumar
相关产品推荐
相关产品推荐

