basicamente, o navegador mostrando uma URL sem a barra final é apenas cosmético. Quando faz o pedido, ainda pede
GET / HTTP / 1.1
Host: onde quer que esteja.
neste caso, é o caminho. Você não pode ter um caminho vazio. O caminho da raiz é /.
Agradecemos antecipadamente por qualquer ajuda fornecida.
Atualização: Tanques para Gerard H. Pille , Adrien responde e algumas investigações de logs eu vim para transformar a questão um pouco.
Agora eu percebo firmemente que a barra final em http://example.com/
não é uma simples barra no caminho, mas uma parte documentada da URL entre porta e caminho :scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
(muito envergonhado por não saber disso)
Mas ainda assim, por que o meu navegador não oculta essa barra em seu comportamento convencional? Poderia ser por causa de http: em vez de https:? (palpite muito selvagem)
Estou usando o Nginx como um proxy reverso para o Apache (N está processando não-php e estática, A é para php, obviamente).
De alguma forma, não consigo fazer uma reconfiguração do Nginx para seguir a recomendação comum de remoção da barra à direita para tornar o http://example.net/
parecido com http://example.net
Agora meu arquivo de configuração do host virtual nginx tem esta aparência:
server {
listen 80;
root /var/www/example.net/;
index index.html index.htm;
server_name example.net;
#Can't make this work as intended
rewrite ^http://(example.net)/$ http://$1 permanent;
#Also tried
#rewrite ^http://(.*)/$ http://$1 permanent;
#And
#rewrite ^/(example.net)/$ /$1 permanent;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
location ~ /\.ht {
deny all;
}
}
@ GerardH.Pille ,
bem, sim, você estava certo: se eu regexp reescrever como ^(.*)/$ $1;
, ele realmente corresponde a "/", mas o erro Comprimento Zero ocorre ... (o que não é surpreendente) ...
2018/01/17 20:42:39 [notice] 1309#0: *5 "^(.*)/$" matches "/", client: 10.0.2.2, server: example.net, request: "GET / HTTP/1.1", host: "example.net"
2018/01/17 20:42:39 [notice] 1309#0: *5 rewritten data: "", args: "", client: 10.0.2.2, server: example.net, request: "GET / HTTP/1.1", host: "example.net"
2018/01/17 20:42:39 [error] 1309#0: *5 the rewritten URI has a zero length, client: 10.0.2.2, server: example.net, request: "GET / HTTP/1.1", host: "example.net"
Mas ainda assim, como essa barra raiz fica escondida em qualquer site normal?
basicamente, o navegador mostrando uma URL sem a barra final é apenas cosmético. Quando faz o pedido, ainda pede
GET / HTTP / 1.1
Host: onde quer que esteja.
neste caso, é o caminho. Você não pode ter um caminho vazio. O caminho da raiz é /.