How to redirect OWA HTTP to HTTPS (the actually easy way that works)

 

With SBS 2008, if try to open Outlook Web Access at http://remote.example.com/owa, you’ll get “Error 403 – Forbidden: Access is denied…”, because SSL is required in IIS.   The proper URL is https://remote.example.com/owa, but most users don’t remember that little “s”.

 

 

As a note, SBS 2011 already redirects this for you.  But if you’re stuck with SBS 2008, there are tons of articles that show how to automatically redirect users :

 

Microsoft has 4 different articles on the topic, but the forums are still covered with it.  The solutions vary on a few themes:

  • Redirect in IIS on the Default website (doesn’t work since that site doesn’t actually answer those HTTP requests in SBS).
  • Disable Require SSL, and edit OWA’s default.aspx to Response.Redirect (doesn’t work because it’s precompiled and handled by DLL).
  • Set a redirect or custom 403 page on the actual OWA directory to a custom SSLRedirect.html with a Meta redirect (might work, but clunky & straight outta 1998!)

Other solutions either forget you can’t get past “Require SSL” to reach the redirect, or they don’t know you’ve already been redirected (creating an infinite redirect loop and “Too many Redirects” error).

 

I think I have a much simpler solution — Just set the OWA directory’s 403 error to redirect to the right URL.  Here’s how:

  1. Start the Internet Information Services (IIS) Manager snap-in.
  2. Expand the local computer, expand Sites, and then click SBS Web Applications.
  3. At the bottom of the SBS Web Applications Home pane, click Features View if this option is not already selected.
  4. In the IIS section, double-click Error Pages, and double-click 403 in the list.
  5. In the Edit Custom Error Page dialog, select Respond with a 302 redirect.
  6. Type the Absolute URL of the /owa virtual directory. For example, type https://mail.contoso.com/owa.

 

OWA’s Error Pages list should look like this when you’re done:

image

 

Hope it helps someone.

Vista/Win7 Solution: Skip the Switch User screen

So I’ve been happily using Windows 7 for a couple years (since the beta), but just finally moved my family into it, and discovered a new issue in the process:

Like XP, the “Win+L” key combination locks your profile so the next person won’t “be you.” But instead of the main Welcome screen with the list of accounts, you get the Switch User screen, with a button to take you to the real Welcome screen. This a confusing extra step when you’re the next guy just looking to login.

I did some research, and it looks like a LOT of folks have wondered how to skip the Switch User screen, but without luck.

Not sure, but I may be the first with a decent solution. The ingredients are tsdiscon.exe (which does the “Switch User”), and Task Scheduler (which hooks it up to the Win+L combination), both of which are built into Windows. Here’s how:

  1. Click Start, type taskschd.msc, enter. Confirm any UAC prompts you get, and Task Scheduler will open.
  2. In the Action menu, click Create Task.
  3. In the Create Task dialog > General tab, type a meaningful Name like “Lock » Switch User”
  4. In the Security options section, click the “Change User or Group” button, type _Users_ in the dialog and click OK.
  5. On the Triggers tab, click the “New…” button. In the New Trigger dialog > “Begin the task” list, choose “On workstation lock” and click OK. This takes you back to the Create Task dialog.
  6. In the Actions tab, click the “New…” button. In the New Action dialog > “Program/script” field, type tsdiscon.exe and click OK. This takes you back to the Create Task dialog.
  7. Click OK again and enter the password for the administrative account it offers.
  8. Test it! Press Win+L and you should see the Switch User screen for a moment, then the main Welcome screen.

2011-01-17 UPDATE:  As I was setting up this tweak on a new system, I noticed Windows 7 HOME doesn’t include tsdiscon.exe. It’s easy enough to copy from a Win7 Pro machine (from/to %windir%\System32), and then works as I described.

2011-02-10 UPDATE:  It looks like I was on the same track as Duncan Smart.  He didn’t make automate it with Task Scheduler, but he did write a downloadable substitute for tsdiscon.exe (handy if you have no access to a Windows PRO machine.)

Might as well use it

I finally took some of that new web tech I was talking about here and used it here.  I couldn’t stand the “brick” look anymore, so it’s mostly border-radius and box-shadow, but there’s also an RGBA background color and a webkit transition.  None of this gives joy for IE, though – perhaps I should Chrome Frame it?   …I did also tighten up the Reader feed and search box. 

I realize how long it’s been here, and that Facebook’s walled garden has been catching the vast amount of my sharing.  I’d like to “get out” here more, but til I do, don’t miss me there.

~r

HTML5, CSS3, and me

 

I recently stumbled on FindMeByIP.com, and thought “yet another IP lookup / geolocation site”.   Then I noticed the “Modernizr Support” section, detailing my browser’s support for new standards. 

I was impressed both by the graph and my browser’s support.  Here’s how it looked with Google Chrome:
image

 

It reminded me that last week I was experimenting with HTML5, CSS3, and Chrome Frame, and had whipped together an ugly(!) demo.  I figured I’d line up the current browsers here and run them through both exercises.  To be clear, my demo is NOT fair because it uses several Webkit-specific extensions, but I thought it worth seeing.

 

The Downward Spiral

Chrome 3.0 (and Safari 4.0)
image  image
Yes, it’s tilted on purpose. Interesting bit: the black background is the abyss behind the rounded <HTML>.  Who knows what lurks there?  (Bizarre video artifacts when I resize the browser, actually).

 

Firefox 3.5
image image
@font-face worked on my header, but no gradients, and I don’t know why border-radius failed.  (It’s worked on other sites).

 

Opera 10
image image
Why is the standards-nazis’ browser so sucky here? 

Internet Explorer 8
image image
The bottom of the suck, and what we’ve all come to know and loathe.  (To be fair though, IE has supported much of this since v4, but in a non-standard way.  Pragmatically, I’d grant it Box-shadow, Opacity, Gradients, 2D Transforms, and Transitions thanks to its CSS Visual Filters and Transitions.)

 

A Testing Crisis

Currently I test my sites with SIX web browsers: Safari/Chrome, Firefox, Chrome, IE6, IE7, and IE8.  This is a testing crisis for me, and IE6 has no give (with a stubborn 33% market share), so I’ve been forcing IE8 into downgraded IE7 mode for a slight reprieve.  Yes, I downgrade an already-behind browser! 

Sure, I could try to encourage users to upgrade their browsers, but apparently most people have no idea what that means! 

(If you’re an internet professional, you should watch this)

 

Aagh, there’s no way out!  With apologies to Mr. Folds:

IE is a brick and I’m drowning slowly.

 

It’s really more like three bricks drowning the web.  If we could drop one or two versions, IE8 could be survivable, but how?

 

Hope We Can Hope For?

This is where Chrome Frame wants to come to the rescue.  With it, I can use Chrome as an IE plugin, just like Flash, Java, AIR, or Silverlight.  Sure it’s cheating, but in a good way – it still uses the original native web code (so it is NOT the Un-web like those other plugins).

IE8 with Chrome Frame:
image image

Perfect!  And the same results in IE6 and IE7!

If a plugin story is acceptable (widespread use of the Chrome Frame plugin would help), this means only 3 browser engines to test.  I haven’t used it in production yet, but I’ll be carefully considering it for new projects. 

~

Shiny things for my gearhead peeps

  • Tool – Exchange 2003 SP2 IMF Keyword Manager
    Now I don’t have to edit raw XML and double-check that I didn’t screw it up (open in IE to verify well-formedness, wait/worry for 7513/7514 logged events).
  • Picture – Computer hardware poster
    Reference of over 170 different computer connectors, RAM, CPU sockets, etc.  I put a giant version on my office wall.
  • Article – 10 CSS properties missing in IE6

    1. Rounded or Curved Corners
    2. PNG alpha transparency
    3. Opacity
    4. Fixed Position
    5. Min-width & Max-width
    6. Hover for non anchor elements
    7. Min-height & Max-height
    8. Bicubic scaling for images
    9. Negative text indent for input button
    10. Text shadow

    Good article on what most browsers offer designers these days.  I would just add box-shadow.I happily got to use about half of these features on my most recent site, thanks to some great IE shims:

  • DD_roundies and DD_belatedPNG
    Excellent IE shims for Rounded Corners and PNG Alpha transparency.  There are tons of other IE shims for these, but after much homework, I say these are the best and you want them.  (FYI, I’ve made peace with requiring Javascript for design enhancements, which these are).Now if Drew could port box-shadow to IE, my heart would sing.
  • Article – Universal Internet Explorer 6 CSS
    Article lays out the basic ways to handle IE6 design in 2009, and a fascinating new suggestion.  To wit, not to waste hours in time and a client’s money on lengthy workarounds in an unnecessary attempt at cross-browser perfection.

Hey J-Lo, where did LowSRC go?

Remember the IMG element’s LowSRC attribute?  Unfortunately, no modern browser does!  While the big ones used to offer this for the slower folks among us, they have all dropped support for it.

I need it again, though!  A current project calls for a (just) 320×280 high-color illustration with alpha-transparency – nothing other than a full 32-bit alpha-channel PNG will do that justice.

Out of the editor, it’s 160KB, which is huge for homepage decoration.  A good PNGCrushing got that down to 106KB, which is still 16 seconds on 56K.  Oh, and there’s the rest of the page too…

A pinch of JQuery and classic Javascript later, and LowSRC works again!

$(function() {

  // jLowSRC - Rob Eberhardt (@slingfive.com), May 2009
  $("IMG[lowsrc]").each(function() {
    if (this.readyState=='complete' || this.complete==true) { return }

    var lowsrc = $(this).attr('lowsrc');
    this.lowsrcElem = this;
    if ($.browser.msie && $.browser.version <7 && lowsrc.toLowerCase().indexOf('.png') >-1) {	//IE6
      $(this).wrap('<span></span>');
      this.lowsrcElem = this.parentNode;
      this.lowsrcElem.style.display = 'block';
      this.lowsrcElem.style.width  = this.offsetWidth;
      this.lowsrcElem.style.height = this.offsetHeight; 
      this.lowsrcElem.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +lowsrc+ "')";
      this.style.visibility = 'hidden';
    } else {
      this.lowsrcElem.style.background = 'url(' +lowsrc+ ') no-repeat 0 0';
    }

    this.onload = function() {
      this.lowsrcElem.style.background = '';
      this.lowsrcElem.style.filter = '';
      this.style.visibility = 'visible';
    }
  });

});

 

It works in Firefox 3, Chrome, Safari 3, Opera 9, IE 7 and 8.  I also got it handling IE 6 (with a small re-flow jump to the final image), which is the bulk of the code.  (Dear 33% of the world, your web browser is 800 years old and eating our brains.  Broadband isn’t free, but newer browsers are.)

For testing, I simulated modem speeds and “first loads” (disabled cache) with the brilliant Fiddler2.  It’s not just a noticeable improvement, it’s the difference between getting sandwich or sticking around.

Hope it helps someone else!