nginx: send all requests to a single html page

前端 未结 6 2020
南笙
南笙 2020-11-30 17:45

Using nginx, I want to preserve the url, but actually load the same page no matter what. I will use the url with History.getState() to route the requests in my

相关标签:
6条回答
  • 2020-11-30 18:02

    This worked for me:

    location / {
        alias /path/to/my/indexfile/;
        try_files $uri /index.html;
    }
    

    This allowed me to create a catch-all URL for a javascript single-page app. All static files like css, fonts, and javascript built by npm run build will be found if they are in the same directory as index.html.

    If the static files were in another directory, for some reason, you'd also need something like:

    # Static pages generated by "npm run build"
    location ~ ^/css/|^/fonts/|^/semantic/|^/static/ {
        alias /path/to/my/staticfiles/;
    }
    
    0 讨论(0)
  • 2020-11-30 18:02

    This worked for me:

    location / {
        try_files $uri $uri/ /base.html;
    }
    
    0 讨论(0)
  • 2020-11-30 18:05

    The correct way would be:

    location / {
        rewrite (.*) base.html last;
    }
    

    Using last will make nginx find a new suitable location block according to the result of rewriting.

    try_files is also a perfectly valid approach to this problem.

    0 讨论(0)
  • 2020-11-30 18:09

    Using just try_files didn't work for me - it caused a rewrite or internal redirection cycle error in my logs.

    The Nginx docs had some additional details:

    http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

    So I ended up using the following:

    root /var/www/mysite;
    
    location / {
        try_files $uri /base.html;
    }
    
    location = /base.html {
        expires 30s;
    }
    
    0 讨论(0)
  • 2020-11-30 18:14

    Your original rewrite should almost work. I'm not sure why it would be redirecting, but I think what you really want is just

    rewrite ^ /base.html break;
    

    You should be able to put that in a location or directly in the server.

    0 讨论(0)
  • 2020-11-30 18:25

    I think this will do it for you:

    location / {
        try_files /base.html =404;
    }
    
    0 讨论(0)
提交回复
热议问题