Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/06/2020, 04:28
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Evitar mostrar algunos archivos y a la vez ciertos parámetros en la url con htaccess

Buenos días.

Estoy intentando arreglar o cambiar algunas rutas que aparecen en la url preparadas con .htaccess que o no deberían salir completas o incluso evitar que si el usuario pone algunas de estas se muestre cierto contenido.

Lo estoy haciendo de la siguiente manera:

Index.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. /*=============================================
  4. CONTENIDO DINÁMICO
  5. =============================================*/
  6.  
  7. $rutas = array();
  8. $ruta = null;
  9.  
  10. if(isset($_GET["ruta"])){  
  11.  
  12.     $rutas = explode("/", $_GET["ruta"]);      
  13.  
  14.     /*=============================================
  15.     LISTA BLANCA DE URL'S AMIGABLES
  16.     =============================================*/
  17.  
  18.     if($rutas[0] == "inicio" || $rutas[0] == "contacto"){
  19.        
  20.         include $rutas[0].".php";                      
  21.  
  22.     }else{     
  23.  
  24.         header('Location: inicio');        
  25.  
  26.     }
  27.  
  28. }else{
  29.  
  30.     include "inicio.php";
  31.  
  32. }
  33.  
  34. ?>

htaccess

Código Apache:
Ver original
  1. # Impedir que se pueda ver el listado de contenidos de un directorio
  2. Options All -Indexes
  3.  
  4. RewriteEngine On
  5. RewriteBase /
  6. RewriteRule ^([-a-zA-Z0-9ñÑ_/]+)$ index.php?ruta=$1
  7.  
  8.  
  9. RewriteCond %{SERVER_PORT} !=443
  10. RewriteRule ^(.*)$ https://midominio.com/$1 [R=301,L]
  11.  
  12. # Redirigir la URL con www a la dirección sin www
  13. RewriteCond %{HTTP_HOST} ^www.midominio.com
  14. RewriteRule ^(.*)$ https://midominio.com/$1 [R=301,L]

Hasta aquí lo que logro es que cuando el usuario ponga en la url o el dominio completo o una de las dos palabras de la lista blanca como "inicio" o "contacto" cargue correctamente el contenido, por ejemplo así:

https://midominio.com/
https://midominio.com/inicio
https://midominio.com/contacto

Y si por ejemplo una persona escribe otra palabra que no sea una de las de la lista blanca redirige a inicio, ejemplo:

https://midominio.com/algo -> https://midominio.com/

Hasta aquí todo bien, sin embargo veo varios errores que no deberían ocurrir o al menos no se como evitar por ahora, por ejemplo:

1- Si el usuario añade una barra final "/" y escribe https://midominio.com/inicio/ el dominio carga sin su hoja de estilos, por lo tanto aquí ¿debo de aplicar una redirección a la ruta sin "/"?

2- Si el usuario escribe o añade un carácter no permitido como "." por ejemplo https://midominio.com/inicio. me muestra un directorio de opciones y documentos disponibles
Cita:
Multiple Choices. The document name you requested (/inicio.) could not be found on this server. However, we found documents with names similar to the one you requested.
Available documents: /inicio.php (common basename)
¿Aquí debo de evitarlo también con una redirección 301?

3- Si el usuario intenta ver un directorio, por ejemplo el de imágenes https://midominio.com/imagenes en vez de evitarlo y redirigir a inicio me da un error de redirección
Cita:
Esta página no funcionaLa página midominio.com te ha redirigido demasiadas veces.
Borrar las cookies.
ERR_TOO_MANY_REDIRECTS
4- Si el usuario escribe https://midominio.com/contacto?ruta=contacto o
https://midominio.com/index.php?ruta=inicio/ me cargan correctamente sin embargo me gustaría que en la url solo se pueda ver como mucho https://midominio.com/inicio o https://midominio.com/contacto

5- Si el usuario escribe https://midominio.com/index.php carga perfectamente sin embargo me gustaría ver como hacer que no aparezca la extensión "php" y tampoco la palabra index. Aquí he probado varias opciones con RewriteCond y RewriteRule pero tampoco me funcionan.

En general ¿qué podría añadir o eliminar de lo actual?

Saludos.