如何在iOS设备的PAC文件中拦截以.pdf结尾的URL?
解决iOS PAC文件拦截PDF链接的问题
核心问题分析
你当前的PAC代码有两个关键问题导致规则失效:
- 返回值未使用字符串常量:标准PAC规范中,
BLACKHOLE和DIRECT(对应你代码里的normal)必须用双引号包裹,否则iOS的PAC引擎会将其视为未定义变量,直接跳过规则。 - 匹配规则不准确:
shExpMatch(url, ".*pdf")和url.match(".pdf")会匹配任意位置包含pdf的URL,而非仅以.pdf结尾的链接。
修正后的PAC代码
function FindProxyForURL(url, host) { url = url.toLowerCase(); host = host.toLowerCase(); // 匹配以.pdf结尾的URL,或指定域名 if ( shExpMatch(url, "*.pdf") || _dnsDomainIs(host, "api.giphy.com") ) { // 拦截请求(丢弃流量) return "BLACKHOLE"; } else { // 直接连接,不经过代理 return "DIRECT"; } }
关键修正说明
- 匹配规则优化:
shExpMatch(url, "*.pdf")是iOS PAC引擎支持的通配符写法,精准匹配所有以.pdf结尾的URL;如果想用正则,也可以替换为url.match(/\.pdf$/)(注意正则的结尾锚点$和转义的.)。 - 返回值规范:必须使用标准PAC字符串常量,
"BLACKHOLE"用于丢弃流量(拦截),"DIRECT"用于直接连接网络。 - 小写转换保留:继续保留
url和host的小写转换,确保匹配不区分大小写。
额外验证步骤
- 确认PAC文件编码为UTF-8无BOM格式,避免iOS加载时出现解析错误。
- 通过JAMF重新推送配置后,在iOS设备的「设置-无线局域网-已连接网络-代理」中确认PAC文件已成功加载。
- 测试不同域名下的PDF链接(如
https://example.com/test.pdf),验证拦截效果。
内容的提问来源于stack exchange,提问作者checkn8
相关产品推荐
相关产品推荐

