5
votes

I have an Umbraco site on the root. It's working fine.

I need to be able to serve static (not ASP.NET) content from IIS, eg /foo. (/foo maps to a different folder structure than the main app, eg:

www.example.com     -> d:\sites\example.com
www.example.com/foo -> d:\sites\static\foo
www.example.com/bar -> d:\sites\static\bar
  • I can setup an IIS application, but then I inherit the parent applications web.config, and as this is static content, it has none of the dlls etc needed (and shouldn't have them!)

  • I can setup an IIS virtual directory, and add in the various bits into the web.config to tell Umbraco NOT to use the folder (umbracoReservedUrls, umbracoReservedPaths). This works, however it is still running as the main ASP.NET application, and I'd much prefer it to be only static (ie, no .NET runtime allowed)

Neither is ideal, as we may have a few of these, so will need to script all the creation. Editing 4 web.config files (in a web cluster) isn't ideal.

What I'd like is:

  • Make a virtual directory (or app) pointing to the right place. Tell IIS to serve it up as static content. If I have to drop a web.config into the folder (/foo), telling it to not load anything at all, that'd be fine (I can then use a non-.NET app pool)

Everything I search for comes up with a "nope, can't be done". Did I miss something?

[edit]

Just to clarify, I'm not needing a CDN — we have one. I just want to have /foo to be it's own folder, with a bunch of html/css/images (eg /foo/index.html, /foo/images/logo.png), which are served up to the user, but not via umbraco — just via IIS.

3
We ended up using a static site on a seperate domain, and redirected the user to it. Plan is to move the redirect into HAProxy (at the front) rather than having umbraco do it.Nic Wise

3 Answers

3
votes

On your second suggestion in the question, you could tell IIS to disallow script access.

I've just had to do something similar to this as a quick-fix for something needing SSL hosting for a few days at work, so I did:

  1. Put the code in its own folder inside an Umbraco site.

  2. Made the folder be its own application:

    How to create an application in IIS6
    (source: serverintellect.com)

  3. (I could have disabled Execute permissions here, had I wanted to, from the drop-down box reading "Scripts only" in the screenshot above, but I actually need execute permissions for my quick-fix.)

  4. Added a minimal Web.config to override the bits of the Umbraco Web.config that I didn't want:

    <configuration>
       <system.web>
          <httpModules>
             <clear/>
          </httpModules>
          <httpHandlers>
             <clear/>
             <add path="*.aspx" verb="*"
               type="System.Web.UI.PageHandlerFactory" validate="true"/>
             <add path="*" verb="GET,HEAD,POST"
               type="System.Web.DefaultHttpHandler" validate="true"/>
             <add path="*" verb="*"
               type="System.Web.HttpMethodNotAllowedHandler" validate="true"/>
          </httpHandlers>
       </system.web>
    </configuration>
    

    (These handlers were copied directly from C:\​Windows\​Microsoft.NET\​Framework64\​v4.0.30319\​Config\​web.config on my laptop)

  5. There is no step five.

Quick — and very dirty — but it works ;o)

2
votes

maybe a little bit ugly, but could you create a symlink into your umbraco root folder and just serve it as if it were a regular folder? (Maybe also adding the path to the umbracoReservedPaths setting in the web.config)

0
votes

I never found a good solution to this, so we ended up just putting it on a seperate domain, and using UrlRewriting to redirect the user to that other server.

Not perfect, but it does work.