Moving WordPress uploads to AWS S3

There are 2 plugins that make the magic work.

Connects your install to the bucket of your choice and all future uploads will go to S3

This plugin will run on the existing uploads (if you have any) and regenerate them on S3 whilst updating your URLs in the posts/pages.

There is a pretty handy walk through here too if you are new to AWS permissions and buckets.

Installing WordPress in a subdirectory in a .NET application

When you install WordPress as a root web app using Web Platform Installer, everything just works. ¬†However, adding a WordPress blog to a subdirectory (e.g. /blog) needs quite a few extra steps beyond the base install¬†to get everything ‘working’.

Installing PHP

I used the PHP 7 32 bit. Before installing it you will need the Visual C++ Redistributable (again 32 bit)!

Web.config in sub directory

<?xml version="1.0" encoding="UTF-8"?>
      <rule name="wordpress" patternSyntax="Wildcard">
        <match url=".*"/>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
        <action type="Rewrite" url="index.php"/>

Web.config in root

No changes required


The web.config in the root must have a few permissions added to it before things will work. Add IUSR(Should already by on) and IIS_IUSRS. This will allow the subdirectory to access the parent.

Virtual Application and App Pool

  • Remove the default application and app pool that the wordpress install created.
  • Create a new app pool (unmanaged code) and set the Identity (advanced settings) to LocalSystem
  • Re-add the virtual application and ensure you use the new app pool created above.

Uploads and Imports

To enable uploads to work I had to make a few changes

  • Php uploads to C:\Windows\Temp and then copies to the uploads directory. The problem is that the permissions get inherited. Create a new directory, add IIS_IUSRS permissions and update PHPini.php to point to this as the temp uploads folder.
  • Also in the wp-admin directory I found I needed to add a new phpini.php to allow for better memory management, as a relatively small data import would cause it to tank. Not sure if this is a required step but it seemed to help!



memory_limit = 128M


So there you have it. There is definitely a learning curve to this if you’re not from PHP land, but overall the installation seems to be working!


A selection of resource that came in very handy to making this all happen!