1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119---
title: 'ion-route-redirect'
---
import Props from '@ionic-internal/component-api/v7/route-redirect/props.md';
import Events from '@ionic-internal/component-api/v7/route-redirect/events.md';
import Methods from '@ionic-internal/component-api/v7/route-redirect/methods.md';
import Parts from '@ionic-internal/component-api/v7/route-redirect/parts.md';
import CustomProps from '@ionic-internal/component-api/v7/route-redirect/custom-props.mdx';
import Slots from '@ionic-internal/component-api/v7/route-redirect/slots.md';
<head>
<title>ion-route-redirect: Redirect 'from' a URL 'to' Another URL</title>
<meta
name="description"
content="ion-route-redirect is used with as a direct child of an ion-router and redirects 'from' a URL 'to' another URL. Read to learn about the route redirect plugin."
/>
</head>
import EncapsulationPill from '@components/page/api/EncapsulationPill';
A route redirect can only be used with an `ion-router` as a direct child of it.
:::note
Note: this component should only be used with vanilla and Stencil JavaScript projects. For Angular projects, use [`ion-router-outlet`](router-outlet.md) and the Angular router.
:::
The route redirect has two configurable properties:
- `from`
- `to`
It redirects "from" a URL "to" another URL. When the defined `ion-route-redirect` rule matches, the router will redirect from the path specified in the `from` property to the path in the `to` property. In order for a redirect to occur the `from` path needs to be an exact match to the navigated URL.
## Multiple Route Redirects
An arbitrary number of redirect routes can be defined inside an `ion-router`, but only one can match.
A route redirect will never call another redirect after its own redirect, since this could lead to infinite loops.
Take the following two redirects:
```html
<ion-router>
<ion-route-redirect from="/admin" to="/login"></ion-route-redirect>
<ion-route-redirect from="/login" to="/admin"></ion-route-redirect>
</ion-router>
```
If the user navigates to `/admin` the router will redirect to `/login` and stop there. It will never evaluate more than one redirect.
## Usage
```html
<!-- Redirects when the user navigates to `/admin` but
will NOT redirect if the user navigates to `/admin/posts` -->
<ion-route-redirect from="/admin" to="/login"></ion-route-redirect>
<!-- By adding the wilcard character (*), the redirect will match
any subpath of admin -->
<ion-route-redirect from="/admin/*" to="/login"></ion-route-redirect>
```
### Route Redirects as Guards
Redirection routes can work as guards to prevent users from navigating to certain areas of an application based on a given condition, such as if the user is authenticated or not.
A route redirect can be added and removed dynamically to redirect (or guard) some routes from being accessed. In the following example, all urls `*` will be redirected to the `/login` url if `isLoggedIn` is `false`.
```tsx
const isLoggedIn = false;
const router = document.querySelector('ion-router');
const routeRedirect = document.createElement('ion-route-redirect');
routeRedirect.setAttribute('from', '*');
routeRedirect.setAttribute('to', '/login');
if (!isLoggedIn) {
router.appendChild(routeRedirect);
}
```
Alternatively, the value of `to` can be modified based on a condition. In the following example, the route redirect will check if the user is logged in and redirect to the `/login` url if not.
```html
<ion-route-redirect id="tutorialRedirect" from="*"></ion-route-redirect>
```
```javascript
const isLoggedIn = false;
const routeRedirect = document.querySelector('#tutorialRedirect');
routeRedirect.setAttribute('to', isLoggedIn ? undefined : '/login');
```
## Properties
<Props />
## Events
<Events />
## Methods
<Methods />
## CSS Shadow Parts
<Parts />
## CSS Custom Properties
<CustomProps />
## Slots
<Slots />