Una medida más de seguridad para nuestros sitios Web puede ser la ocultación enmascaración de las extensiones de los ficheros. De esta manera nadie sabe en que lenguaje está programado el sitio.
EJ: en vez de mostrar la url index.php que muestre index.html o index.dryts
Aquí os dejo el script que acabo de hacer con htaccess
RewriteEngine On
RewriteCond %{REQUEST_URI} .html [NC]
RewriteRule ^(.*)\.html$ $1.php
Estas 3 simples líneas hacen que cualquier petición html sea tratada como un php.
En el servidor no tendremos los archivos como html sino como php que es lo que realmente son.
RewriteEngine On
[Activa la sobre-escritura de la URL]
RewriteCond
[indica que empieza una condición (como un if de toda la vida)]
%{REQUEST_URI}
[obtiene la petición del fichero]
[NC]
[indica que la condición es insensible a mayúsculas y minúsculas]
RewriteRule
[Si se cumple la condición escribe la regla]
^(.*)\.html$ $1.php
[expresión regular que saca el nombre del fichero de la petición y le cambia la extensión]
EJ:
- 1-Se llama a dryts.html
- 2-Se realiza la condición, como es un .html entra en la condición
- 3-Escribe la regla
- La expresión regular ^(.*) obtiene el nombre del fichero (dryts), este nombre se guarda en la variable $1.
- Acto seguido le decimos que procese la petición pero en vez del fichero dryts.html el fichero dryts.php
Un breve repaso de los caracteres de las expresiones regulares en apache (información de la web oficial de apache)
Text:
- . => [Any single character]
- [chars] => [Character class: One of chars]
- [^chars] => [Character class: None of chars]
- text1|text2 => [Alternative: text1 or text2]
Quantifiers:
- ? => [0 or 1 of the preceding text]
- * => [0 or N of the preceding text (N > 0)]
- + => [1 or N of the preceding text (N > 1)]
Grouping:
- (text) => [Grouping of text (either to set the borders of an alternative or for making backreferences where the Nth group can be used on the RHS of a RewriteRule with $N)]
Anchors:
- ^ => [Start of line anchor]
- $ => [End of line anchor]
Escaping:
- \char => [escape that particular char (for instance to specify the chars ".[]()” etc.)]
Con este breve repaso os explico que hace la expresión utilizada en el script
^(.*)\.html$
^ => [empieza por]
(.*) => [agrupa todo tipo de letras, números, símbolos,etc que pueden estar 0 o N veces]
\.html$ => [el $ indica que es el final de la expresión mientras que la \ es para escapar el . de .html]
Más información sobre mod_rewrtie aquí
NOTA: se necesita tener activado el modulo mod_rewrite de apache.
Abrir el httpd.conf (C:\wamp\bin\apache\apache2.2.8\conf\httpd.conf) y quitar la # de delante de #LoadModule rewrite_module modules/mod_rewrite.so
Lo que explicas aquí es absurdo.
Si tu escribes http://www.dominio.com/paginicial.php en tu navegador, la pagina será mostrada en el cliente. En dicho caso debería devolver un error 404 indicando que la pagina no existe y no verificando que la página está escrita con php.
Resumiendo:
El titulo “Ocultar extensiones de las paginas Web” no se corresponde.
De todas formas gracias por la info
Hola Maria,
Si quieres ocultar el lenguaje de programación con el cual has desarrollado la web es un método más que valido que cumple con este cometido.
Que lo encuentres absurdo o poco útil es cuestión de cada persona.
El servidor no verifica en que lenguaje esta escrita la petición, simplemente mediante .htaccess indicas al servidor que todas las peticiones con una cierta extensión sean tratadas como si se tratara de otra extensión.
Por ejemplo si desarrollas tu web en php pero no quieres que se sepa puedes hacer que todas las peticiones sean con extensión aspx.
Entonces una petición http://www.dominio.com/indice.aspx el servidor la entenderá como http://www.dominio.com/indice.php y mostrara el contenido sin mostrar ningún error 404.
No debe devolver el error 404 ya que lo que tu quieres precisamente es enmascarar la extensión, si directamente comprobara si existe el fichero no tendría sentido hacer ningún script.
No se que otro título le podría poner, alguna sugerencia?
Es que no es ocultar la extensión sino enmascararla con otra, como dices. Y para que no se sepa que los archivos realmente están codificados con un lenguaje determinado deberías indicar mas extensiones.
No encuentro información respecto a ocultar la extensión. Todo lo que veo son soluciones así.
He visto por ahí que algunos cambian el tipo de archivo con que el servidor lo asocia, por ejemplo de extensión .php por uno desconocido .fff
Pero a consecuencia se pierde portabilidad y es un coñazo tener que cambiar todas las extensiones, no lo veo nada práctico.
Hola Maria,
Tienes toda la razón, este tipo de métodos hacen perder toda la portabilidad.
Quizás te sirva un sistema parecido a las URL amigables, por htaccess redireccionar todas las peticiones a un FrontController y allí tratarlas.
Puedes hacer un sistema que la petición http://www.dominio.com/usuario.php la redireccione al FrontController y allí distribuya la petición a donde corresponda (clase, fichero, función, etc)
De esta manera no se mostraría nunca la extensión de ningún fichero y te serviría para aumentar el posicionamiento de la Web.
Un saludo
Hola, muy interesante tu aporte… quisiera saber como hago para ocultar la extencion http://www.miweb.com./lab.html a http://www.miweb.com/lab
gracias!
Hola Edgar,
Perdona por la tardanza en contestar.
Con el script de apache que te pongo a continuación harías lo que preguntas.
Ojo porque el script le dice que cualquier ruta que le llegue al servidor le añada el *.html, en tu ejemplo le diría que http://www.miweb.com/lab vaya a buscar a http://www.miweb.com/lab.html que es lo que quieres.
El problema que puede surgir es si intentas acceder a una imagen directamente.
El apache redirigirá la imagen como si de un html se tratara.
La peticion http://www.miweb.com/imglab.jpg llamaría a http://www.miweb.com/imglab.html.
Para evitar esto puedes hacer varias cosas, así rápidamente se me ocurren 2.
1- Comprobar que extensión es antes de hacer la regla.
2- Definir que la regla de poner la extensión *.html sólo sea valida para X directorios en concreto.
Esto lo podrías conseguir añadiendo el .htaccess sólo en el directorio donde tengas los html, con esto solucionarías el problema de las imágenes, css, js, etc.
PD: estos scripts se deben añadir en un fichero .htaccess en la carpeta que te interese.