Bird
Raised Fist0
Nginxdevops~10 mins

Trailing slash normalization in Nginx - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Trailing slash normalization
Request URL Received
↓
Check if URL ends with '/'
↓
Final Response Sent
The server checks if the requested URL ends with a slash. If yes, it redirects to the same URL without the trailing slash using a 301 redirect. Otherwise, it serves the URL as is.
Execution Sample
Nginx
location / {
  if ($request_uri ~ "^(.+)/$") {
    return 301 $scheme://$host$1;
  }
}
This nginx config redirects URLs ending with a trailing slash to the same URL without it.
Process Table
StepRequest URLCondition ($request_uri ~ "^(.+)/$")ActionResulting URLResponse
1/about/TrueRedirect to URL without trailing slash/about301 Moved Permanently
2/aboutFalseServe URL as is/about200 OK
3/contact/TrueRedirect to URL without trailing slash/contact301 Moved Permanently
4/contactFalseServe URL as is/contact200 OK
5/FalseServe URL as is/200 OK
💡 Requests without trailing slash are served directly; requests with trailing slash are redirected once.
Status Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4After Step 5
$request_uri/about//about//about/contact//contact/
Condition ResultN/ATrueFalseTrueFalseFalse
Resulting URLN/A/about/about/contact/contact/
ResponseN/A301200301200200
Key Moments - 3 Insights
Why does the server redirect when the URL ends with a slash?
Because the condition ($request_uri ~ "^(.+)/$") matches URLs ending with a slash, triggering a 301 redirect to the URL without the trailing slash as shown in steps 1 and 3 of the execution_table.
What happens if the URL is just '/'?
The condition is false for '/', so the server serves the URL as is with a 200 OK response, as shown in step 5 of the execution_table.
Does the server redirect URLs without trailing slashes?
No, URLs without trailing slashes do not match the condition and are served directly with 200 OK, as shown in steps 2 and 4.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the response code at step 3 for the URL '/contact/'?
A301 Moved Permanently
B200 OK
C404 Not Found
D500 Internal Server Error
💡 Hint
Check the 'Response' column in row 3 of the execution_table.
At which step does the condition ($request_uri ~ "^(.+)/$") evaluate to false for the first time?
AStep 1
BStep 3
CStep 2
DStep 5
💡 Hint
Look at the 'Condition' column in the execution_table rows.
If the URL '/blog/' is requested, what would be the resulting URL after redirection?
A/blog/
B/blog
C/blog/index.html
D/blog//
💡 Hint
Refer to how URLs ending with '/' are redirected in the execution_table steps 1 and 3.
Concept Snapshot
Trailing slash normalization in nginx:
- Check if URL ends with '/'
- If yes, redirect (301) to URL without trailing slash
- If no, serve URL as is
- Uses regex condition: $request_uri ~ "^(.+)/$"
- Helps avoid duplicate content and broken links
Full Transcript
Trailing slash normalization in nginx means the server looks at the requested URL. If the URL ends with a slash, the server sends a 301 redirect to the same URL without the slash. If the URL does not end with a slash, the server serves the page directly. This is done using a simple if condition with a regex that checks for a trailing slash. For example, '/about/' redirects to '/about' with a 301 status. URLs like '/' or '/contact' are served as is with a 200 status. This helps keep URLs consistent and avoids duplicate content issues.

Practice

(1/5)
1. What is the main purpose of trailing slash normalization in nginx?
easy
A. To disable URL rewriting completely
B. To block all URLs that end with a slash
C. To serve different content based on trailing slash presence
D. To ensure URLs are consistent by adding or removing trailing slashes

Solution

  1. Step 1: Understand URL consistency

    Trailing slash normalization makes URLs uniform by either adding or removing the slash at the end.
  2. Step 2: Identify nginx role

    nginx uses redirects to enforce this consistency, improving user experience and SEO.
  3. Final Answer:

    To ensure URLs are consistent by adding or removing trailing slashes -> Option D
  4. Quick Check:

    Trailing slash normalization = URL consistency [OK]
Hint: Normalization means making URLs uniform with or without slash [OK]
Common Mistakes:
  • Thinking it blocks URLs ending with slash
  • Confusing normalization with disabling rewriting
  • Assuming different content is served based on slash
2. Which nginx directive is used to redirect URLs for trailing slash normalization?
easy
A. proxy_pass
B. return 301
C. listen
D. root

Solution

  1. Step 1: Identify redirect directive

    nginx uses return 301 to send permanent redirects for URL changes.
  2. Step 2: Confirm other directives' roles

    proxy_pass forwards requests, listen sets ports, root sets file paths, none redirect URLs.
  3. Final Answer:

    return 301 -> Option B
  4. Quick Check:

    Redirect = return 301 [OK]
Hint: Redirects use 'return 301' in nginx config [OK]
Common Mistakes:
  • Using proxy_pass for redirects
  • Confusing listen with redirect
  • Using root directive incorrectly
3. Given this nginx snippet, what happens when a user visits /example/?
location /example {
  if ($request_uri ~ ".+/$") {
    return 301 $scheme://$host$uri;
  }
}
medium
A. The URL is redirected to /example without trailing slash
B. The URL stays as /example/ with trailing slash
C. The server returns a 404 error
D. The URL is redirected to /example// with double slash

Solution

  1. Step 1: Analyze the if condition

    The condition checks if the URL ends with a slash using regex ".+/$".
  2. Step 2: Understand the redirect

    If true, it returns a 301 redirect to the same URL but without the trailing slash (because $uri excludes query string and trailing slash).
  3. Final Answer:

    The URL is redirected to /example without trailing slash -> Option A
  4. Quick Check:

    Trailing slash removed by redirect = The URL is redirected to /example without trailing slash [OK]
Hint: If URL ends with slash, return 301 redirects to no slash [OK]
Common Mistakes:
  • Assuming URL stays unchanged
  • Thinking server returns 404
  • Expecting double slashes in redirect
4. Identify the error in this nginx config for adding trailing slashes:
location / {
  if ($request_uri !~ "/$") {
    return 301 $scheme://$host$uri/;
  }
}
medium
A. Using $request_uri instead of $uri causes double query strings
B. Missing semicolon after return statement
C. The regex should check for trailing slash presence, not absence
D. Using if inside location is not allowed

Solution

  1. Step 1: Understand variables used

    $request_uri includes query string, $uri does not. Adding slash to $uri is safer.
  2. Step 2: Identify problem with $request_uri

    Appending slash to $request_uri can cause double query strings or malformed URLs.
  3. Final Answer:

    Using $request_uri instead of $uri causes double query strings -> Option A
  4. Quick Check:

    Use $uri for clean URL redirects [OK]
Hint: Use $uri, not $request_uri, to avoid query duplication [OK]
Common Mistakes:
  • Thinking if inside location is forbidden
  • Ignoring query string issues
  • Misreading regex logic
5. How would you configure nginx to always add a trailing slash to URLs except for requests to files (like .html or .jpg)?
hard
A. Use proxy_pass to add trailing slash
B. Always append slash to all URLs unconditionally
C. Use an if condition to check if URI lacks slash and does not end with a file extension, then return 301 with slash
D. Disable trailing slash normalization for all URLs

Solution

  1. Step 1: Define condition for adding slash

    Check if URL does not end with slash and does not match file extensions like .html, .jpg.
  2. Step 2: Use if and return 301 for redirect

    Use nginx if directive with regex to exclude files, then redirect to URL with trailing slash.
  3. Final Answer:

    Use an if condition to check if URI lacks slash and does not end with a file extension, then return 301 with slash -> Option C
  4. Quick Check:

    Conditional redirect excluding files = Use an if condition to check if URI lacks slash and does not end with a file extension, then return 301 with slash [OK]
Hint: Exclude files by regex, redirect others with slash [OK]
Common Mistakes:
  • Appending slash to all URLs including files
  • Using proxy_pass for redirects
  • Disabling normalization entirely
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard