Struct actix_web::web::Redirect

source ·
pub struct Redirect { /* private fields */ }
Expand description

An HTTP service for redirecting one path to another path or URL.

By default, the “307 Temporary Redirect” status is used when responding. See this MDN article on why 307 is preferred over 302.

Examples

As service:

use actix_web::{web, App};

App::new()
    // redirect "/duck" to DuckDuckGo
    .service(web::redirect("/duck", "https://duck.com"))
    .service(
        // redirect "/api/old" to "/api/new"
        web::scope("/api").service(web::redirect("/old", "/new"))
    );

As responder:

use actix_web::{web::Redirect, Responder};

async fn handler() -> impl Responder {
    // sends a permanent (308) redirect to duck.com
    Redirect::to("https://duck.com").permanent()
}

Implementations§

Construct a new Redirect service that matches a path.

This service will match exact paths equal to from within the current scope. I.e., when registered on the root App, it will match exact, whole paths. But when registered on a Scope, it will match paths under that scope, ignoring the defined scope prefix, just like a normal Resource or Route.

The to argument can be path or URL; whatever is provided shall be used verbatim when setting the redirect location. This means that relative paths can be used to navigate relatively to matched paths.

Prefer Redirect::to() when using Redirect as a responder since from has no meaning in that context.

Examples
App::new()
    // redirects "/oh/hi/mark" to "/oh/bye/johnny"
    .service(Redirect::new("/oh/hi/mark", "../../bye/johnny"));

Construct a new Redirect to use as a responder.

Only receives the to argument since responders do not need to do route matching.

Examples
use actix_web::{web::Redirect, Responder};

async fn admin_page() -> impl Responder {
    // sends a temporary 307 redirect to the login path
    Redirect::to("/login")
}

Use the “308 Permanent Redirect” status when responding.

See this MDN article on why 308 is preferred over 301.

Use the “307 Temporary Redirect” status when responding.

See this MDN article on why 307 is preferred over 302.

Use the “303 See Other” status when responding.

This status code is semantically correct as the response to a successful login, for example.

Allows the use of custom status codes for less common redirect types.

In most cases, the default status (“308 Permanent Redirect”) or using the temporary method, which uses the “307 Temporary Redirect” status have more consistent behavior than 301 and 302 codes, respectively.

// redirects would use "301 Moved Permanently" status code
Redirect::new("/old", "/new")
    .using_status_code(StatusCode::MOVED_PERMANENTLY);

// redirects would use "302 Found" status code
Redirect::new("/old", "/new")
    .using_status_code(StatusCode::FOUND);

Trait Implementations§

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
Convert self to HttpResponse.
Wraps responder to allow alteration of its response. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Should always be Self
The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more