skip to Main Content

I need to set these two Urls redirect to a custom 404 page:
https://example.com/frontend/#/,
https://example.com/frontend/

the Nginx config below works fine:

server{
    listen 80;
    server_name example.com;
    
    error_page 404 /404.html;
    
    location = /404.html {
    root /opt/app/nginx/html;
    internal;
    }
    
    location = /frontend/ {
    return 404;
    }
}

However this setting makes URLs with the same prefixes go to 404 as well, which is a pain in the ass!
https://example.com/frontend/#/abc,
https://example.com/frontend/#/123
all redirect to 404.
I use exact matching (= modifier) for the 404 settings,
why does it still affect others and how can I fix it?
Thank you for any help! 😀

Edited
I found the reason thanks to the answers given down there! So the # sign is processed by the browser only, the browser never passes # to the server, that’s why Nginx treats https://example.com/frontend/#/abc,
https://example.com/frontend/#/123 all as https://example.com/frontend/.
In this case, if I wanna set https://example.com/frontend/#/ to the 404 page, what I need to do is to create an index page under /frontend folder in the project, and put 404 content inside the index page, There’s nothing Nginx could do with redirecting URL contains hash sign.

2

Answers


  1. You can’t do that because the hash part isn’t sent to the server. It’s for client side processing only.

    Login or Signup to reply.
  2. Try using two location without the "/" in each.

     location = /frontend {
    return 404; }
     location = /frontend/# {
    return 404; }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search