我有一些 Privoxy 规则,可以将 HTTP 维基百科 [en,de] 流量重定向到 HTTPS:(来自“user.action”文件的一小部分)
{ +redirect{s@http://en.wikipedia.org/wiki/@https://secure.wikimedia.org/wikipedia/en/wiki/@} }
.en.wikipedia.org
{ +redirect{s@http://de.wikipedia.org/wiki/@https://secure.wikimedia.org/wikipedia/de/wiki/@} }
.de.wikipedia.org
所以你遇到了问题:有没有办法将“regexp”或其他东西放入“en”,“de”?还有数百种其他语言,我认为将它们全部写下来是一个糟糕的解决方案。<
还有一个问题:到目前为止我的解决方案好吗?我这么问是因为如果我访问https://secure.wikimedia.org/wikipedia/en/wiki/File:Nokota_Horses_cropped.jpg 没关系,它使用的是 HTTPS。但是如果我点击图片:http://upload.wikimedia.org/wikipedia/commons/d/de/Nokota_Horses_cropped.jpg 它使用 HTTP!所以这不好。图片是否位于仅 HTTP 服务器上,或者我可以编写另一个重定向规则来查看 HTTPS 中的图片?
答案1
Privoxy 的重定向操作使用有限的正则表达式来匹配和重写 URL。幸运的是,支持反向引用。您可以以支持两个字母语言代码以及您提到的单个三个字母代码的方式重写重定向匹配:
{ +redirect{s@http://(..|war).wikipedia.org/wiki/@https://secure.wikimedia.org/wikipedia/$1/wiki/@} }
.wikipedia.org
我已将您原来的两个字母语言代码替换为“(..|war)”。括号创建一个后向引用,稍后可以将其称为“$1”。这两个点与任意两个字符匹配。管道字符是逻辑“或”运算符,与两侧的字符串进行匹配。您可以在一个匹配组中多次使用管道。您可以在单个正则表达式中使用多个反向引用。增加用于引用匹配的数字(即 $2、$3 等)。
Privoxy 用户手册附录描述了对正则表达式的支持,并且那里有更多有用的示例。
对于第二个问题,您必须为要重定向到 HTTPS 的每个 url 编写额外的重定向操作。这将很麻烦,因为您必须针对每个站点的 url 模式调整正则表达式,并且该站点当然也必须通过 SSL 提供内容。