Forum: NGINX 301 redirect with custom content problem

Posted by Robert Mueller (Guest)
on 2012-11-30 02:53
(Received via mailing list)
Hi

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
content.

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
1.2.4.

--
Rob Mueller
robm@fastmail.fm
Posted by Maxim Dounin (Guest)
on 2012-11-30 08:44
(Received via mailing list)
Hello!

On Fri, Nov 30, 2012 at 12:53:03PM +1100, Robert Mueller wrote:

>     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.

This way you'll end up with two 301 redirects due to rewrite being
executed again for /foo/bar/301.html.

Try this instead:

    server {
        listen 80 default;

        location / {
            error_page 301 /foo/bar/301.html;
            return 301 "https://example.com$request_uri";
        }

        location = /foo/bar/301.html {
            # static
        }
    }


--
Maxim Dounin
http://nginx.com/support.html
Posted by Robert Mueller (Guest)
on 2012-12-04 06:29
(Received via mailing list)
> This way you'll end up with two 301 redirects due to rewrite being
> executed again for /foo/bar/301.html.

Ah right, makes sense.

>         location = /foo/bar/301.html {
>             # static
>         }
>     }

Great, that worked, thanks.

Rob
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.