Apache Redirect HTML Files to a Directory
242 words ยท 2 minutes
The Problem
After recently switching static site generators (SSG), my blog URLs changed with no option to preserve the classic .html
extension at the end of my blog post URLs.
I really disliked using my old SSG (Jekyll) and prefer my new tool (Zola) much more, so I was determined to figure out a way to get the proper redirect set up so that people who find my posts online aren't constantly met by 404 errors.
The Solution
To solve this problem, I really needed to solve two pieces:
- Redirect all blog post URL requests from
/blog/some-post.html
to/blog/some-post/
. - Ensure that no other
.html
files are redirected, such asindex.html
.
After a lot of tweaking and testing, I believe I have finally found the solution. The solution is shown below.
On
%{REQUEST_URI} !\index.html$ [NC]
^(.*).html$ https://example.com/$1 [R=301,L]
This piece of code in the Apache .conf
or .htaccess
file will do the following:
- Turn on the RewriteEngine so that we can modify URLs.
- Ignore any
index.html
files from the rule we are about to specify. - Find any
.html
files within the website directory and redirect it to exclude the file extension. - The final piece is adding the trailing slash (
/
) at the end of the URL - you'll notice that I don't have an Apache rule for that since Apache handles that automatically.