aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2021-10-09-apache-redirect.org
diff options
context:
space:
mode:
Diffstat (limited to 'content/blog/2021-10-09-apache-redirect.org')
-rw-r--r--content/blog/2021-10-09-apache-redirect.org45
1 files changed, 45 insertions, 0 deletions
diff --git a/content/blog/2021-10-09-apache-redirect.org b/content/blog/2021-10-09-apache-redirect.org
new file mode 100644
index 0000000..9e7121d
--- /dev/null
+++ b/content/blog/2021-10-09-apache-redirect.org
@@ -0,0 +1,45 @@
+#+date: <2021-10-09>
+#+title: Apache Redirect HTML Files to a Directory
+#+description:
+
+
+* 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 ([[https://jekyllrb.com][Jekyll]])
+and prefer my new tool ([[https://www.getzola.org][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:
+
+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.
+
+#+begin_src conf
+RewriteEngine On
+RewriteCond %{REQUEST_URI} !\index.html$ [NC]
+RewriteRule ^(.*).html$ https://example.com/$1 [R=301,L]
+#+end_src
+
+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.