I ran into a puzzling issue today. Normally I wouldn’t recommend hosting a CMS inside another CMS installation, but for various reasons, I had to set up a WordPress blog inside an existing SilverStripe installation. For sake of this article, I’ll call it example.com/blog/.
The first problem I ran into was that instead of loading WordPress, example.com/blog/ was showing the directory index:
That’s obviously not ideal, as well as being a bad idea for security.
I then added Options -Indexes
to the WordPress .htaccess
file to disable the directory listing, but all I got was a “403 Forbidden” error when going to example.com/blog/ or example.com/blog/wp-admin/ (however, example.com/blog/?p=1 would redirect to the post URL using pretty permalinks and worked fine 🤔):
I then tinkered with the SilverStripe .htaccess
file, thinking it was overriding something; I added this line to make it ignore the WP blog URLs:
RewriteRule ^/blog/?.*$ /blog/index.php [L]
Still no luck.
Finally, I thought to try manually setting the index file, so added this line at the top of WP’s .htaccess
file:
DirectoryIndex index.php
And that did the trick!
There must have been a server-wide setting to use some other file for DirectoryIndex
(that’s the file that gets served by default when you try to access a directory URL), but I didn’t have access to the entire server.
Summary
Here’s what I ended up using:
SilverStripe .htaccess
file
RewriteEngine On
RewriteBase '/'
# Added for WP blog
RewriteRule ^/blog/?.*$ /blog/index.php [L]
# Process through SilverStripe if no file with the requested name exists.
# Pass through the original path as a query parameter, and retain the existing parameters.
RewriteCond %{REQUEST_URI} ^(.*)$
### Blog Redirect ###
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* framework/main.php?url=%1 [QSA]
WordPress .htaccess
file
DirectoryIndex index.php
Options -Indexes