redirect loop with try_files
Francis Daly
francis at daoine.org
Sat May 4 20:55:28 UTC 2013
On Sat, May 04, 2013 at 10:20:32AM -0400, mschipperheyn wrote:
Hi there,
> ## Rewrite index requests
> rewrite ^(.*)/index.(.*)$ $1/ permanent;
That is likely to lead to a loop, unless you take great care elsewhere.
(The typical defaults are: a request for /dir/ leads to an internal
rewrite to /dir/index.html, which the above would convert to an external
redirect to /dir/, which is where we came in.)
> location = / {
> set $red 0;
> if ($http_cookie ~* "JSESSIONID"){
> set $red 1;
> }
Here, you use "if" inside "location" and you do something other than
"return" or "rewrite ... last". That's rarely a good idea:
http://wiki.nginx.org/IfIsEvil
Can you move the if/set logic to server{} level, to avoid that likely
confusion?
> When a users types in domain www.site.com, he ends up in an endless loop.
I strongly suspect that the loop is caused by the first rewrite, because
the try_files does not apply because at least one of your "if" conditions
is true.
You can test that by trying "curl -i http://www.site.com/", and adding
whatever is necessary to make sure that none of the "if" conditions match,
and seeing if you get anything different.
Or you can just redo the configuration to avoid most "if" inside
"location" blocks.
f
--
Francis Daly francis at daoine.org
More information about the nginx
mailing list