如何为Android和iOS正确托管.well-known目录下的关联文件?
解决Flutter深度链接(Universal Links)文件托管问题
Angular 端配置调整
- 添加静态资源目录
在项目根目录创建.well-known文件夹,将apple-app-site-association和assetlinks.json放入其中。
修改angular.json文件,在projects -> [你的项目名] -> architect -> build -> options -> assets数组中添加.well-known目录,确保构建时该目录会被复制到输出的dist文件夹:
"assets": [ "src/favicon.ico", "src/assets", "src/.well-known" // 新增这一行 ]
- 排除路由守卫拦截
如果你的Angular应用使用了全局路由守卫(比如认证守卫),需要在守卫逻辑中排除.well-known相关路径,避免被重定向到登录页:
// 示例:在AuthGuard的canActivate方法中添加判断 canActivate(route: ActivatedRouteSnapshot): boolean { const path = route.routeConfig?.path; if (path?.startsWith('.well-known')) { return true; // 允许直接访问 } // 原有认证逻辑... }
Apache 服务器配置调整
- 跳过.well-known目录的认证
在你的Apache站点配置文件(如/etc/apache2/sites-available/example.com.conf)中,针对.well-known目录添加配置,跳过认证检查:
<Directory "/var/www/example.com/.well-known"> AllowOverride None Require all granted # 若之前有AuthType等认证配置,添加以下两行跳过认证 AuthType None Satisfy Any </Directory>
- 调整Rewrite规则优先匹配静态文件
如果Apache配置了将所有请求转发到Angular的index.html(SPA常见配置),需要修改Rewrite规则,让.well-known下的文件请求优先匹配实际文件,不转发到前端路由:
RewriteEngine On # 优先处理.well-known下的文件请求 RewriteRule ^/.well-known/ - [L] # 原有SPA重写规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.html [L]
- 设置正确的MIME类型
apple-app-site-association文件无后缀,需在Apache配置中指定其MIME类型为application/json,确保iOS设备能正确识别:
<Files "apple-app-site-association"> ForceType application/json </Files>
完成以上配置后,重启Apache服务器,再访问https://example.com/.well-known/apple-app-site-association和https://example.com/.well-known/assetlinks.json,即可直接返回文件内容,不会被重定向到登录页。
内容的提问来源于stack exchange,提问作者Ridham Desai
相关产品推荐
相关产品推荐

