Skip to content

Commit 11b53bc

Browse files
committed
Very rough draft
1 parent 2b56972 commit 11b53bc

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
---
2+
title: Gateway redirects
3+
description: What gateway redirects are and how to use them with a website on IPFS.
4+
---
5+
6+
# THIS IS A DRAFT. DO NOT MERGE.
7+
8+
# To do:
9+
1. How to redirect old URL to a new place (301 and 302 redirects)
10+
1. How to use it for PWA/SPA hosting (catch-all 200)
11+
1. How to use it to provide custom `404 not found` pages (superceding what `ipfs-404.html` does - ideally not mention old way)
12+
13+
# Gateway Redirects
14+
15+
Gateway Redirects provide support for URL redirects and rewrites for websites hosted on Subdomain or DNSLink gateways. This feature enables support for single-page applications, and avoids link rot when moving to IPFS-backed hosting.
16+
17+
Using Gateway Redirects, you can change the appearance of a URL, change where content is located without breaking existing links, redirect invalid URLs to a custom 404 page, and enable URL rewriting.
18+
19+
# Supported HTTP status codes
20+
21+
* `200` - OK (redirect will be treated as a rewrite, returning OK without changing the URL shown in the browser).
22+
* `301` - Permanent redirect (the default status).
23+
* `302` - Found (commonly used for temporary redirects).
24+
* `303` - See other (replaces PUT and POST with GET).
25+
* `307` - Temporary redirect (preserves the body and HTTP method of the original request).
26+
* `308` - Permanent redirect (preserves the body and HTTP method of the original request).
27+
* `404` - Not found (can be used redirect to custom 404 pages).
28+
* `410` - Gone (the requested content has been permanently removed).
29+
* `451` - Unavailable for legal reasons.
30+
31+
# How to set up gateway redirects
32+
33+
To use Gateway Redirects, there must be a file named `_redirects` stored underneath the root CID of the website. This `_redirects` file must be a text file containing one or more lines that follow the format explained below.
34+
35+
## Format of the `_redirects` file
36+
37+
Each line contained within the `_redirects` file has 3 basic components:
38+
39+
1. The `from` path, this specifies the path to be redirected from.
40+
1. The `to` path, this specifies the path to be redirected to.
41+
1. The `status` component, this part is optional and specifies the HTTP status code that will be returned. (301, 404, etc.)
42+
43+
For example, if I want to redirect a page to a custom `404` page, the `_redirects` file will contain a line that looks something like this:
44+
```
45+
/<requested page> /custom404.html 404
46+
```
47+
48+
The same format is used for all redirects.
49+
50+
## Placeholders
51+
52+
Placeholders are named variables that can be used to match path segments in the `from` path and inject them into the `to` path.
53+
54+
For example, if I wanted to search for an article titled "hello world" that was written on June 15, 2022, I could search for it like this: `/posts/06/15/2022/hello-world` and be redirected to `/articles/2022/06/15/hello-world`
55+
56+
## Splat
57+
58+
If the `from` path ends with an asterisk (`*`), the rest of the `from` path will be slurped up into the special `:splat` placeholder, which can then be injected into the `to` path.
59+
```
60+
/posts/* /articles/:splat
61+
```
62+
:::note
63+
Splat logic must only apply to a single trailing asterisk, as it is a greedy match that consumes the remainder of the path. :::
64+
65+
## Comments
66+
67+
Any line in the `_redirects` file that begins with `#` will be ignored and treated as a comment.
68+
69+
## Line termination
70+
71+
Each line in the `_redirects` file must be terminated with either `\n` or `\r\n`.
72+
73+
```
74+
/<requsted page> /custom404.html 404 \n
75+
/home /index.html \n
76+
```
77+
# Evaluation
78+
79+
Rules must only be evaluated when hosted on a subdomain or DNSLink gateway, this is to maintain same-origin isolation.
80+
81+
## Order
82+
83+
Rules must be evaluated in order, redirecting or rewriting using the first matching pair.
84+
85+
## No forced redirects
86+
87+
Redirect logic will only be evaluated if the requested path is not in the DAG. Any performance impact associated with checking for the existence of a `_redirects` file or evaluating redirect rules will only be incurred for non-existent paths.
88+
89+
# Error handling
90+
91+
If there are any errors reading or parsing the `_redirects` file, the error codes will be returned with an HTTP 500 status code.

0 commit comments

Comments
 (0)