entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

No muestra documentos cuando oculto parte de la url con .htaccess

Tengo la siguiente estructura en mi directorio html

dominio
|_carpeta1
   |_carpetaA
   |    |_Doc1
   |    |_Doc2
   |_carpetaB

Mi .htaccess tiene el siguiente código

RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ carpeta1/CarpetaA/index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
IndexIgnore ..

Conseguí hacer que me redireccionase a "CarpetaA" sin problemas, viéndose la URL como quería dominio.es/CarpetaA, pero cuando intento acceder a uno de los archivos del directorio, en este caso tiene solamente pdf, me redirige a dominio.es/doc1 y me salta el error de que la página no existe.

Necesito que se puedan acceder a los archivos, pero tiene que seguir sin verse la url, para que no accedan a otras carpetas que tiene la misma.

1 Respuesta

0voto

Peter Puntos147660

¿Poner un simple archivo index en blanco no te sirve?
¿Con un .htaccess en ese directorio y lo siguiente?

Options -Indexes

Con cualquiera de esas dos puedes dejar los archivos ocultos y que no se vean los archivos.

Saludos.

0voto

Lilii comentado

Lo que pretendo es que los archivos se vean, para que puedan acceder. El directorio ya tiene un archivo index.php con código. Si accedo con la ruta entera si me permite verlos, pero si accedo con la corta (la escrita en el .htaccess), me salta el error

0voto

Peter comentado

Una cosa es que se vean y otra es que sean accesibles y ahí es donde no se entiende qué necesitas.

1- Que cuando alguien entra a CarpetaA se muestren todos los archivos y en esa carpeta no tienes ningún index. Se despliega todo el contenido como tal.

2- Que cuando alguien entra a CarpetaA salga una hoja en blanco, pero si alguien accede mediante otro enlace directo a Doc1 que está dentro de CarpetaA, puede ver el archivo.

¿Cuál de las dos es la que quieres tener?

Saludos.

0voto

Lilii comentado

Quiero tener la opción 2. Pero mi situación es que en la CarpetaA tengo un index, que hace que se muestren los docs listados en la página. Cuando utilizo la ruta real donde está alojado el doc, funciona, se abre y se ve, pero cuando utilizo la ruta acortada por el .htaccess, se listan, pero al querer abrirlos salta un error 404.
Perdona la tardanza de la respuesta. Muchas gracias

0voto

Peter comentado

Ok, nos vamos acercando al problema real.

¿Para qué necesitas el .htaccess si todo funciona sin el?

0voto

Lilii comentado

Tenemos unos clientes a los que pasamos documentación de esta forma. Tenemos muchas carpetas para cada cliente, por lo que es necesario esconder la ruta real, ya que si sale la ruta entera, pueden borrar parte de la dirección y meterse en otros archivos que no son para ellos

0voto

Peter comentado

Ok, ahora si se entiende que necesitas.

pueden borrar parte de la dirección y meterse en otros archivos que no son para ellos

Utiliza lo que te puse arriba como respuesta en un .htaccess:

Options -Indexes

Con eso no pueden acceder a nada.

También (dependiendo de tu hosting) debes de tener la opción de activarlo de forma global con 1 solo click de tu panel.

Saludos.

0voto

Lilii comentado

Probé lo que me dijiste, añadí Options -Indexes en el .htaccess del directorio donde se encuentran los documentos, y sigue pasando lo mismo de antes. Pueden borrar la ruta y acceder a todo lo demás.
Probé a añadir la opción en el .htaccess padre, en el directorio padre html, y ocurre lo mismo.

0voto

Peter comentado

/ruta/docs/web/index.html

Si quieres ocultar los archivos dentro de docs para que si borran web/index.html de la URL no se despliegue nada, tienes que poner ese htaccess dentro de docs. ¿Así lo estás haciendo?

Si es así, otra regla debe de estar sobre escribiéndola. Suponiendo que tu hosting tenga activo el modulo AllowOverride prueba con:

AllowOverride Options -Indexes

Y como comenté, poner un simple index.html en blanco dentro del directorio también soluciona tu problema.

Saludos.

0voto

Lilii comentado

Problema de que borren los archivos no existe, ya que solo tienen permisos para acceder a carpetas y leerlas.
Probé a poner ahora el AllowOverride Options -Indexes pero ahora me salta un error 500. No sé que puede estar pasando.
La línea del código lo añadí en el .htaccess de la carpeta que contiene todos los documentos y carpetas, que siguiendo el ejemplo de mi estructura que puse junto con la pregunta, correspondería con "carpeta1"

0voto

Peter comentado

  • Quita tus otras directrices del htaccess, únicamente deja eso.
  • Revisa que tu hosting tenga activo AllowOverride en la configuración de Apache.

Voy a dividir las dudas en 2, para irlas descartando.

1- ¿Porque no pones un archivo index.html en carpeta1, carpetaA y carpetaB?

2- No que borren los archivos, que borren parte de la URL. El htaccess con Options -Indexes debe de ir también dentro de carpeta1, carpetaA y carpetaB.

Saludos.

0voto

Lilii comentado

¿Hay que quitar obligatoriamente todas las otras directrices del .htaccess? Tengo ahí otras opciones que hacen funcionar el servidor, no me interesaría quitarlas.
AllowOverride está activo en el servidor.

1- ¿El archivo index.html debería tener algo escrito dentro? ¿Se crea y ya, o hay que cogerlo de algún otro sitio?
2- Hice lo que me dijiste, puse la opción en todos y sigue el error 500. El cliente accede por URL, quizá al denegarle el acceso, por eso lo impide. Te pongo un ejemplo con esto, para explicarme mejor. Un cliente tiene documentos en una carpeta, entonces nosotros, mediante una documentación externa que pasamos por correo, le ponemos el link de la carpeta en la que se encuentran los documentos dominio.es/carpeta1/CarpetaA

1voto

Peter comentado

1- Un simple archivo index completamente vacío.
2- Options -Indexes no redirige, únicamente prohibe que se muestre el contenido de la carpeta en cuestión.

Habría que revisar todo lo que tienes puesto para saber en donde tienes los problemas, porque la solución real a tu pregunta son las ya mencionadas: Options -Indexes o un simple archivo index.

Configurar todo el servidor para diferentes cosas, ya es diferente.

El problema que veo es que quieren enviarle a un cliente dominio.es/carpeta1/CarpetaA para que vea los archivos, se desplieguen y él pueda acceder a todo, pero que si alguien que no es el entra a esa URL no se vean los archivos. Y eso a así sin más es imposible. O se ven o no se ven de forma general. Otra cosa sería poner acceso con usuario y contraseña a dichas carpetas, que en su caso sería mejor.

Entonces tienen mal pensado su flujo de trabajo y herramientas que utilizan para esas tareas, hay herramientas mucho más sencillas para lo que quieren hacer.

Saludos.

0voto

Lilii comentado

Gracias por tu ayuda, ya entendí bastante mejor las cosas. El caso es que no solo tenemos un cliente, sino varios. No es querer denegar el acceso a otros, sino más bien hacer que no puedan borrar la url, que solo se queden en la carpeta designada.
Gracia a ti, entendí lo que hace el Options -Indexes, que claro, te bloquea la carpeta entera con todo lo que tenga, en vez de bloquear solo el acceso a la carpeta donde se encuentre.
El archivo index.html no hizo nada en el servidor.
Probaré a añadir usuario y contraseña.
También estaba mirando otra opción distinta que se trata de acortar la url, para que no sea visible todo lo demás.
Muchas gracias por tu ayuda, me ha servido bastante

0voto

Peter comentado

De nada :)

Creo que se están complicando con algo que es muy sencillo y deberían de utilizar otra herramienta para esa tarea, pero que bueno que te aclaró un poco las cosas y las entendiste mejor.

Saludos.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta