Home > Software design >  Why does the website 404 when I add a "/" at the end of the url (Flask)?
Why does the website 404 when I add a "/" at the end of the url (Flask)?

Time:05-27

When I go to my (imaginary website), it works:

mywebsite.com/flowers

But if I add a "/" at the end, I get a "Not Found" error:

mywebsite.com/flowers/

Assuming my route is:

@app.route('/flowers', methods=['GET'])
def xyz():..

Am I supposed to redirect "/flowers/" to /"flowers" or am I supposed to add multiple routes? I'm not sure how it's supposed to work without copy-pasting my entire function for every (original route "/").

CodePudding user response:

In Flask, the URL redirection with and without trailing / works differently.

@app.route('/works/')
def works():
    return 'This works'

@app.route('/sorry')
def sorry():
    return 'sorry'

The URL for the works endpoint has a trailing slash. It’s similar to a folder in a file system. If you access the URL without a trailing slash (/works), Flask redirects you to the URL with the trailing slash /works/.

The URL for the sorry endpoint does not have a trailing slash. It’s similar to the pathname of a file. Accessing the URL with a trailing slash /sorry/ produces a 404 "Not Found" error.

Alternatively, to make this works at the application level, You can use

app.url_map.strict_slashes = False

Setting strict_slashes to False will work as expected with the /sorry/ route.

URL routes that end with a slash are branches, others are leaves. If strict_slashes is enabled (the default), visiting a branch URL without a trailing slash will redirect to the URL with a slash appended.

Reference: Flask doc , Werkzeug Docs

  • Related