On 9/19/06, Igor Sysoev <is-G...@public.gmane.org> wrote:
On Tue, 19 Sep 2006, Bob Ippolito wrote:
It seems that the redirection from http://example.com/somedir to
http://example.com/somedir/ does a 302 using the local hostname rather
than the Host header.
I was able to work around the issue using rewrite:
if (-d $request_filename) { rewrite ^(.*[^/])$ http://$host$1/; }
It would be nice if this was fixed in a future release. I looked
around in the source for a bit, but I wasn't able to find exactly what
needs to be changed.
Had you set "server_name" ?
server {
server_name example.com www.example.com;
...
}
server {
server_name example1.com www.example1.com;
...
}
nginx uses first name of the "server_name" directive in redirect.
If server_name is not set, then it uses local hostname.
In this case, I did not set any server_name. Why not use the Host
header always, and default to server_name only if the client didn't
send one? You should really have to explicitly redirect to a different
host, the implicit redirections should simply work with the Host they
were given by the client.
If you have an wildcard server you can force nginx to use always
the "Host" header in redirects using "*":
server {
server_name example.com *;
...
}
The "*" could not be first name. You need to set something,
it may be even dummy name "_":
server_name _ *;
That should work. The wiki should probably be updated to say that * is
a valid name, as long as it's not the first one. It currently implies
that * can only be used to replace part of a domain, not the whole
thing :)
-bob