Trailing Slash Redirect Loop Help

Alex Med nginx-forum at forum.nginx.org
Sun Oct 6 17:02:22 UTC 2019


Dear Francis:

After so many years, I am back to the same questions I had many years ago,
but never resolved on Nginx.  So perhaps, it is time to change this and find
a useful implementation.

So, now what I want is to get rid off the trailing slashes for anything that
is not a directory or a folder (because my tomcat app seems to add a
trailing slash to it and that creates an infinite loop that does not allow
the page to render.).

I have used many things to address the issue.  You can see my efforts below,
but they do not work.  I always get the 
infinite loop for directories and an error from the browser:

The browser can not open the page "http://example.com/xxxx" The error is:
"Load can not follow more than 20 redirections" (:0)

As you stated it:

"And: what's a file and what's a directory? Your initial config
example used proxy_pass, which refers to remote urls, not files
or directories. *This* nginx does not know whether an upstream url
corresponds to a file or to something else. So that may want to be
considered before designing the solution."

What can I do?

Thank you for your feedback!




----this is what I have tried -----


# 1 - The Evil If

if ( !-e $request_filename ) { rewrite ^/(.*)/$ /$1 permanent; }



# 2 - TRY_FILES


 location / {

##TRY_FILES WILL GET A $URI AND TEST IF IT IS A FILE AND SERVE IT IF THE
FILE EXISTS 
##ELSE IT WILL TEST IF THE URI IS A DIRECTORY $URI/ IF DIRECTORY EXISTS IT
WILL SERVE IT, AND ELSE AND FINALLY
##IF IT IS NOT EITHER IT WILL PASS IT TO A LOCATION 
##THAT WILL REWRITE TO LOWERCASE
## root - OUR APP REQUIRES NO ROOT FOR NGINX TO WORK WITH IT SO NO ROOT IS
PROVIDED FROM THE TOMCAT APP.
    
          

             try_files $uri $uri/ @trimslash; 
           
            proxy_pass http://xxx.xx.xx.xxx:IIII;
            proxy_set_header  Host $host;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout 600;
            proxy_send_timeout 600;
            proxy_read_timeout 600;
            proxy_redirect off;

            ###
            ### ADD THIS FOR WEBSOCKET SUPPORT
            ###

               proxy_http_version 1.1;
               proxy_set_header Upgrade $http_upgrade;
               proxy_set_header Connection "Upgrade";

                    }

location @trimslash {

          rewrite ^/(.*)/$ /$1 permanent;

            proxy_pass http://xxx.xx.xx.xxx:IIII;
            proxy_set_header  Host $host;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout 600;
            proxy_send_timeout 600;
            proxy_read_timeout 600;
            proxy_redirect off;

            ###
            ### ADD THIS FOR WEBSOCKET SUPPORT
            ###

               proxy_http_version 1.1;
               proxy_set_header Upgrade $http_upgrade;
               proxy_set_header Connection "Upgrade";
}

        }
##BETA EXAMPLE HTTP SERVER CONFIGURATION END

Posted at Nginx Forum: https://forum.nginx.org/read.php?2,273964,285805#msg-285805



More information about the nginx mailing list