301 redirect with custom content problem

Robert Mueller robm at fastmail.fm
Fri Nov 30 01:53:03 UTC 2012


I'm trying to setup a permanent redirect from http -> https. As a
fallback for a small number of users where https is blocked, I'd like to
show them a message.

I thought an error_page 301 handler would allow me to do this, but I'm
having trouble making it work:

  server {
    listen *:80 default;
    rewrite ^ https://example.com$uri permanent;

  error_page 301 /foo/bar/301.html;

Seems to confuse the redirect. It seems to completely replace the
redirect Location header with foo/bar/301.html rather than actually
serving that content.

I tried some alternatives like:

    error_page 301 @301;
    location @301 {
      root /foo/bar/;
      try_files $uri /301.html;

But again, it replaces the Location header adding /301.html on the end
of the redirect hostname rather than actually serving the 301.html

Is there a reliable way to return custom content for a 301 redirect in a
way that doesn't affect the redirect location itself? I'm using nginx

Rob Mueller
robm at fastmail.fm

More information about the nginx mailing list