Skip to content

Commit

Permalink
New TIL on Axum Fallback route
Browse files Browse the repository at this point in the history
  • Loading branch information
coreyja committed Feb 27, 2024
1 parent 16a4df4 commit 44d27ff
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions til/2024-02-27T10:40:08Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
title: Fallback Routing with Axum
date: 2024-02-27
slug: fallback-routing-with-axum
---

Yesterday I ran into a small problem with my Axum routing for my blog.
So today I wanted to take 10 minutes and do quick write up about it!

My blog uses `Axum` as its Web Framework of choice. I was looking through some old emails and found one where a reader reached out about a post I made! (It was [this one about FZF Spell Checking in VIM](https://coreyja.com/posts/vim-spelling-suggestions-fzf/))

But I realized that it was linking to an older URL format, The link was to
`https://coreyja.com/https://coreyja.com/blog/2018/11/10/vim-spelling-suggestions-fzf.html`!

And you can see I was using a different URL structure then, and my current blog didn't have a redirect setup!

And that was our goal! I wanted `https://coreyja.com/blog/2018/11/10/vim-spelling-suggestions-fzf.html` to redirect to `/posts/vim-spelling-suggestions-fzf`.
And I also decided that I wanted `blog/anything-else-here` to redirect to `/posts`

Simple enough!

I added these two routes to my Axum Router function:

```rust
.route("/blog/:year/:month/:date/:slug", get(redirect_to_new_post_url))
.route("/blog/*catchall", get(redirect_to_posts_index))
```

And I expected this to work out of the box! But it didn't :sadnerd:

Instead I got an error about conflicting routes. Luckily the answer is relatively easy, at least in my case!
I just needed to use `nest` to target all the `/blog` urls and then use a `fallback`. Here is what I ended up with!

```rust
.nest(
"/blog",
Router::new()
.route("/:year/:month/:date/:slug", get(redirect_to_new_post_url))
.fallback(redirect_to_posts_index)
)
```

And now I was able to get all the redirects working as I wanted! Go check out that 'old' URL above now and with any luck you should be redirected to the right post!

0 comments on commit 44d27ff

Please sign in to comment.