如何让IIS部署的EC2实例上的apple-app-site-association通过Apple验证
解决iOS深度链接apple-app-site-association验证失败的方案
一、先把文件本身的问题排查清楚
- 检查
apple-app-site-association的JSON语法,逗号、引号这些细节不能错,本地用JSON校验工具过一遍再上传。 - 确认文件里的
appIDs是Team ID+Bundle ID的准确组合,比如XYZ9876543.com.yourcompany.yourapp,一个字符都不能错。 - 保证文件完全没有扩展名——Windows默认会隐藏已知扩展名,要先在文件夹选项里关掉这个设置,确认文件名就是
apple-app-site-association,不是apple-app-site-association.txt或者apple-app-site-association.json(无扩展名是Apple要求的标准)。
二、IIS核心配置调整(关键步骤)
1. 设置正确的MIME类型
打开IIS管理器,找到你的站点:
- 双击「MIME类型」,点击「添加」:
- 文件扩展名:留空(不是填
.,就是空着) - MIME类型:
application/json
- 文件扩展名:留空(不是填
- 顺便确认
.json的MIME类型已经存在(如果没有也加上,防止备用的带扩展名文件出问题)。
2. 配置URL重写规则(避免Angular路由拦截)
在站点的web.config里,把Apple文件的访问规则放在Angular路由规则前面,确保爬虫能直接拿到文件:
<rewrite> <rules> <!-- 优先匹配Apple验证文件,阻止路由拦截 --> <rule name="Apple Root Association" stopProcessing="true"> <match url="^apple-app-site-association$" /> <action type="Rewrite" url="/apple-app-site-association" /> </rule> <rule name="Apple Well-Known Association" stopProcessing="true"> <match url="^.well-known/apple-app-site-association$" /> <action type="Rewrite" url="/.well-known/apple-app-site-association" /> </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>
3. 权限与端口检查
- 给站点物理目录的
IIS_IUSRS用户加上读取权限,确保服务器能正常返回文件。 - 确认EC2安全组开放了443端口——Apple验证工具只认HTTPS,HTTP直接会失败。
三、Angular项目打包配置
在angular.json的assets数组里加上.well-known文件夹,确保打包时能把验证文件复制到dist目录:
"assets": [ "src/favicon.ico", "src/assets", "src/.well-known" // 新增这一行 ]
四、验证流程
- 手动访问
https://你的域名/apple-app-site-association和https://你的域名/.well-known/apple-app-site-association,确认能正常返回JSON内容,且响应头的Content-Type是application/json。 - 清除浏览器缓存后再访问一遍,避免旧缓存干扰。
- 最后用Apple的验证工具测试,输入的域名要和文件里配置的完全一致。
内容的提问来源于stack exchange,提问作者waqar18
相关产品推荐
相关产品推荐

