公共图书馆PAC文件无法正确过滤指定授权站点求助
修正PAC脚本实现目标站点代理转发
问题根源分析
你的脚本存在两个核心问题:
- 匹配逻辑错误:
localHostOrDomainIs(host, value)仅能匹配主机名(域名),但你在proxylist中混入了带协议(https://)和路径(/ipl.php、/ipl)的完整URL,这类项永远无法和host参数匹配。 - 引号格式错误:
var proxyserver = ‘0.0.0.0:8080';使用了中文单引号,会导致脚本解析失败。
修正后的PAC脚本
function FindProxyForURL(url, host) { // 代理服务器地址(修正为英文引号) var proxyserver = '0.0.0.0:8080'; // 仅需匹配域名的站点列表 var domainList = [ "www.tesla.com", "www.monster.com", "www.cnn.com", "www.yahoo.com", "grantstoindividuals.org" // 这个目标站点无特殊路径,直接匹配域名 ]; // 需要匹配URL路径的目标站点模式(用通配符*匹配任意前缀/后缀) var urlPatterns = [ "*://fconline.foundationcenter.org/ipl.php*", "*://www.guidestar.org/ipl*" ]; // 先匹配域名列表 for (var i = 0; i < domainList.length; i++) { if (localHostOrDomainIs(host, domainList[i])) { return "PROXY " + proxyserver; } } // 再匹配URL路径模式 for (var j = 0; j < urlPatterns.length; j++) { if (shExpMatch(url, urlPatterns[j])) { return "PROXY " + proxyserver; } } // 其余流量直接走路由器 return "DIRECT"; }
关键修改说明
- 拆分匹配逻辑:将普通域名站点和带特殊路径的目标站点分开处理,域名用
localHostOrDomainIs匹配,带路径的URL用shExpMatch配合通配符匹配。 - 修正引号格式:把中文引号替换为英文单引号,避免脚本语法错误。
- 优化URL模式:用
*通配符覆盖协议(http/https)和路径后的额外参数(比如可能存在的查询字符串),确保所有相关请求都走代理。
验证方法
- 替换原有PAC脚本内容,部署到代理服务器。
- 在馆内客户端测试三个目标站点:
- 访问
https://fconline.foundationcenter.org/ipl.php - 访问
https://grantstoindividuals.org - 访问
https://www.guidestar.org/ipl
- 访问
- 确认目标站点流量走代理,常规站点(如CNN、Tesla)仍按预期走代理,其他站点直接走路由器。
内容的提问来源于stack exchange,提问作者wildfire23
相关产品推荐
相关产品推荐

