J. Lewis Muir
July 30, 2019 06:12PM
Hello, all!

I have a minimal nginx.conf with one server block that sets the root
directory and one location with a prefix string of "/foo/", and for a
request of "/foo", it returns a 301 permanent redirect to "/foo/". Why?
I expected it to return 404 or similar. I also tried a prefix string of
"/foo", but that also results in the same 301.

Here's the server block (entire nginx.conf at end of message):

----
server {
listen 127.0.0.1:80;
listen [::1]:80;
server_name localhost "" 127.0.0.1 [::1];
root /srv/www/localhost;

location /foo/ {
}
}
----

And here's the curl invocation:

----
$ curl -I 'http://localhost/foo'
HTTP/1.1 301 Moved Permanently
Server: nginx/1.12.2
Date: Tue, 30 Jul 2019 21:54:44 GMT
Content-Type: text/html
Content-Length: 185
Location: http://localhost/foo/
Connection: keep-alive

----

I've read in

https://nginx.org/en/docs/http/ngx_http_core_module.html#location

where it says

If a location is defined by a prefix string that ends with the
slash character, and requests are processed by one of proxy_pass,
fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass, or grpc_pass,
then the special processing is performed. In response to a request
with URI equal to this string, but without the trailing slash, a
permanent redirect with the code 301 will be returned to the requested
URI with the slash appended.

But in my case, I don't believe the request is being processed by any of
those *_pass directives.

Thank you!

Lewis

---- Complete nginx.conf ----
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

server {
listen 127.0.0.1:80;
listen [::1]:80;
server_name localhost "" 127.0.0.1 [::1];
root /srv/www/localhost;

location /foo/ {
}
}
}
----
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

Why 301 permanent redirect with appended slash?

J. Lewis Muir July 30, 2019 06:12PM

Re: Why 301 permanent redirect with appended slash?

Francis Daly July 31, 2019 08:06AM

Re: Why 301 permanent redirect with appended slash?

J. Lewis Muir July 31, 2019 12:46PM

Re: Why 301 permanent redirect with appended slash?

Francis Daly August 01, 2019 12:56PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 299
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready