aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2021-10-09-apache-redirect.md
diff options
context:
space:
mode:
authorChristian Cleberg <hello@cleberg.net>2024-04-27 17:01:13 -0500
committerChristian Cleberg <hello@cleberg.net>2024-04-27 17:01:13 -0500
commit74992aaa27eb384128924c4a3b93052961a3eaab (patch)
treed5193997d72a52f7a6d6338ea5da8a6c80b4eddc /content/blog/2021-10-09-apache-redirect.md
parent3def68d80edf87e28473609c31970507d9f03467 (diff)
downloadcleberg.net-74992aaa27eb384128924c4a3b93052961a3eaab.tar.gz
cleberg.net-74992aaa27eb384128924c4a3b93052961a3eaab.tar.bz2
cleberg.net-74992aaa27eb384128924c4a3b93052961a3eaab.zip
test conversion back to markdown
Diffstat (limited to 'content/blog/2021-10-09-apache-redirect.md')
-rw-r--r--content/blog/2021-10-09-apache-redirect.md47
1 files changed, 47 insertions, 0 deletions
diff --git a/content/blog/2021-10-09-apache-redirect.md b/content/blog/2021-10-09-apache-redirect.md
new file mode 100644
index 0000000..13794f0
--- /dev/null
+++ b/content/blog/2021-10-09-apache-redirect.md
@@ -0,0 +1,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.