I'm trying to setup a proxy.pac file that may be used for IE6 clients. This is basically it:

function FindProxyForURL(url, host) {
    if (shExpMatch(host, "*example.com*")) return "DIRECT";

    return "PROXY";

This file tells the browser that any client trying to go to a host matching "*example.com*" should use a direct connection, otherwise use the proxy.

This works fine in essentially any browser, but IE6 never matches the shExpMatch no matter what I try. I've read this and disabled the cache as described here, but to no avail.

I'm positive IE6 supports the shExpMatch function, but if someone wants to correct me, I'd be glad to hear it. Incidentally, this is running on WinXP SP2.

  • Woops, screwed up at my end, it was using the transparent proxy. – Harley Jul 2 '09 at 2:03

Here's a slightly modified WPAD.DAT I'm using at a Customer site. It's working fine on IE6, unmodified... (because they won't give me the go-ahead to upgrade to IE8). The only modifications I put in were to obscure the Customer's domain names.

function FindProxyForURL(url, host) {

  if ( isPlainHostName(host) ) { return "DIRECT"; }

  if ( shExpMatch(url, "https:*") ) { return "DIRECT"; }

  if ( shExpMatch(url,"http://*.customer.domain.com")) { return "DIRECT"; }

  if ( isInNet(host,"", "") ) { return "DIRECT"; }

  if ( isInNet(host,"", "") ) { return "DIRECT"; }

  if ( isInNet(host,"", "") ) { return "DIRECT"; }

  return "PROXY proxy.customer.domain.com:8080";

The only difference that I see is that you're not matching "http:" at the beginning, but that shouldn't matter.

You're not supposed to do it, but you can put alert() statements in and IE6 will display them. You may be able to get some traction in debugging by doing that.

  • I also noticed he's matching against "host" vs. "url" in your example. Not sure if that matters either. – Kevin Kuphal Jul 2 '09 at 2:18
  • It's all good. I was watching the proxy logs and example.com kept appearing. I found out after hours of debugging that this was because the transparent proxy was being used. Grrr. – Harley Jul 2 '09 at 2:22

I know that you've already solved it, but for others who stumble upon this there is a limitation (by design) in IE for the shExpMatch function in a PAC file in that only the * and the ? regexp wildcards are supported. An alternative is to use a regex object and call the test method on it passing in host or url as the parameter:

var regex = /*example.com*/;
    return "DIRECT";
return "PROXY";
  • Anyone spot the annoying bug here? Everything between /* and */ is regarded as a comment, so you get a syntax error. To do this sort of thing, you'll have to use "var regex = new RegExp('...')" – Harley Jul 3 '09 at 0:11
  • /*example.com*/ doesn't look like a valid regexp anyway. – Craig McQueen Sep 30 '14 at 5:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.