Evitar mostrar algunos archivos y a la vez ciertos parámetros en la url con htacess
Publicado por José Carlos (15 intervenciones) el 23/06/2020 12:44:31
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
htaccess
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 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 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.
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
/*=============================================
CONTENIDO DINÁMICO
=============================================*/
$rutas = array();
$ruta = null;
if(isset($_GET["ruta"])){
$rutas = explode("/", $_GET["ruta"]);
/*=============================================
LISTA BLANCA DE URL'S AMIGABLES
=============================================*/
if($rutas[0] == "inicio" || $rutas[0] == "contacto"){
include $rutas[0].".php";
}else{
header('Location: inicio');
}
}else{
include "inicio.php";
}
?>
htaccess
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Impedir que se pueda ver el listado de contenidos de un directorio
Options All -Indexes
RewriteEngine On
RewriteBase /
RewriteRule ^([-a-zA-Z0-9ñÑ_/]+)$ index.php?ruta=$1
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^(.*)$ https://midominio.com/$1 [R=301,L]
# Redirigir la URL con www a la dirección sin www
RewriteCond %{HTTP_HOST} ^www.midominio.com
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 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 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.
Valora esta pregunta
0