aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2021-10-09-apache-redirect.md
blob: 13794f0c079ebf91966f5202218320e73594eb22 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
+++
date = 2021-10-09
title = "Apache Redirect HTML Files to a Directory"
description = ""
draft = false
+++

# 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](https://jekyllrb.com)) and
prefer my new tool ([Zola](https://www.getzola.org)) 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:

1.  Redirect all blog post URL requests from
    `/blog/some-post.html` to `/blog/some-post/`.
2.  Ensure that no other `.html` files are redirected, such
    as `index.html`.

After *a lot* of tweaking and testing, I believe I have finally found
the solution. The solution is shown below.

``` conf
RewriteEngine On
RewriteCond %{REQUEST_URI} !\index.html$ [NC]
RewriteRule ^(.*).html$ https://example.com/$1 [R=301,L]
```

This piece of code in the Apache `.conf` or
`.htaccess` file will do the following:

1.  Turn on the RewriteEngine so that we can modify URLs.
2.  Ignore any `index.html` files from the rule we are about
    to specify.
3.  Find any `.html` files within the website directory and
    redirect it to exclude the file extension.
4.  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.