Para la 1, la única opción es usar el robots.txt, para eso existe.
Para tu opción 2, si ves el código puedes comprobar si esta logueado:
Código PHP:
if( !logged_in() ) {
die( "Debes de iniciar sesión" );
}
$ruta = $_GET['ruta'];
$archivo_arr = explode( "/", $ruta );
$archivo = $archivo_arr[count($archivo_arr) - 1];
if( !file_exists( $ruta ) ) {
die( "No existe $ruta" );
}
header( "Content-Disposition: attachment; filename=".$archivo."");
header( "Content-type: application/octet-stream" );
@readfile( $ruta );
La función logged_in tu la debes de implementar y debe de comprobar si existe una sesión valida para proceder a descargar el archivo.
Saludos.
Traslado tu duda a un nuevo tema.