A inclusão de ..
em um URL não funciona no nível de solicitação HTTP ou no nível do navegador. Os navegadores apenas resolvem os caminhos relativos, enviando uma solicitação para o arquivo apropriado (limitando-o na raiz do servidor). Então digitando isso em uma barra de endereços:
http://somehost.tld/../../private_file.txt
resultaria em uma solicitação HTTP para:
http://somehost.tld/private_file.txt
Em outras palavras, alguém teria que criar manualmente uma solicitação HTTP para o ../..
para acessar o Apache. E isso volta com HTTP 400 Bad Request
. Exemplo do meu servidor local (que não possui regras de reescrita):
ritsuko:~ spyder$ curl -v http://localhost/../randomfile
* About to connect() to localhost port 80 (#0)
* Trying ::1... connected
* Connected to localhost (::1) port 80 (#0)
> GET /../randomfile HTTP/1.1
> User-Agent: curl/7.19.4 (universal-apple-darwin10.0) libcurl/7.19.4 OpenSSL/0.9.8l zlib/1.2.3
> Host: localhost
> Accept: */*
>
< HTTP/1.1 400 Bad Request
< Date: Wed, 17 Feb 2010 13:18:40 GMT
< Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8l DAV/2
< Content-Length: 226
< Connection: close
< Content-Type: text/html; charset=iso-8859-1
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
* Closing connection #0