# Handling redirects in Netlify

Netlify is a static hosting platform with a git-based deployment system for hosting frontend applications. The built files are delivered via a CDN

Talk about serverless!

So how then do we handle redirection? Thankfully, Netlify has a pretty nifty way to redirect routes which we'll be looking at below.

There are two ways to implement redirection on Netlify.

1. Using the `_redirects` file
2. File-based configuration with `netlify.toml`

## Using the `_redirects` file

To use this method, create a `_redirects` file in a folder that's supposed to be the root of your site.

For example `/static` or `/public`, it all depends on your project's configuration.

Each redirect rule needs to be placed on a new line like this:

```sh
# lines like these are ignored
/      https://newsite.com	
```

Looking at the snippet above, when a user navigates to your site's homepage, they get redirected to the new URL specified on the same line after the old URL.

Lines that begin with `#` are ignored, so they're useful form making comments.

### Specifying custom status codes

By default, all redirect rules have a status code of `301` but to specify a custom status code, you can add that after the new URL like this:

```sh
/content     /blog 302
```

Now, the server will respond with a status code of `302`. The `301` redirect indicates a permanent redirect while the `302` indicates a temporary one.

Other response codes could be used, like `404` and `200`.

### Splats

An asterisk (`*`) after the old URL indicates a splat. A splat represents the remaining parts of the URL after the previous `/`.

```sh
/content/*     /blog/:splat
```

Navigating to `/content/a-random-post` will redirect to `/blog-a-random-post`.

## Shadowing

If a file currently being navigated to exists, the content of the file would still be rendered. However, you can force the redirection by appending an exclamation (`!`) to the new URL.

```sh
/blog/*      /blog/index.html! 200
```

Navigating to `/blog/new-post.html` will redirect to `/blog/index.html` no matter what.

## File-based configuration with `Netlify.toml`

The `netlify.toml` file is used for configuring Netlify outside the dashboard, it also provides a more structured way to handle redirection with more options.

Every redirect rule is written below a line starting with `[[redirects]]`

```sh
[[redirects]]
from = "/content/*"
to = "blog/:splat"
status = 301
force = true
```

By now you must be familiar with the first three rules above, the `force` rule is equivalent to the `!` in the `_redirects` file.

There are more options for the file-based redirects option [here](https://docs.netlify.com/configure-builds/file-based-configuration/#redirects).

## Roundup

If you happen to have both files in your site's root directory, the `_redirects` file usually has the highest priority than the `netlify.toml` file in terms of redirects.

Also, more specific redirection rules also have higher priority than generic ones.

```sh
/blog/index.html      /index.html 302
/blog/*        /articles/:splat 301
```

All navigations to `/blog` except the `/blog/index.html` file will be redirected to the `/articles` route.
