¿Cómo se usa el .htaccess? Este archivo se ve bastante, pero pocas personas realmente saben su uso. El .htaccess (hypertext access) o archivo de configuración distribuida es un archivo en formato ASCII como el que cualquiera puede crear con el bloc de notas, popularizado por el Servidor HTTP Apache, que es el más usado en el mundo cuando hablamos de servidores Web.
Permite definir diferentes directivas de configuración para cada directorio (con sus respectivos subdirectorios) sin necesidad de editar el archivo de configuración principal de Apache.
Cuando hablamos de “directivas” nos referimos a la terminología que usa Apache para los comandos que se usan para los archivos de configuración.
Los archivos .htaccess son usados frecuentemente para especificar restricciones de seguridad para un directorio en particular, de aquí el sufijo “access“. Los servidores suelen usar el .htaccess para reescribir URLs largas y complejas, en otras más simples y fácilmente recordables, permiten bloquear a usuarios por su dirección IP y/o dominio, bloquear bots y arañas web. También permite controlar las páginas de errores cuando estos ocurren del lado del servidor.
¿Cómo se usa el .htaccess?
Expresiones regulares (regex) disponibles en .htaccess
#
Una # le dice al servidor que ignore la línea, que no la ejecute. Se usa para incluir comentarios. Debes tener claro que cada línea de comentarios requiere su propio carácter # así que si quieres añadir mucho texto recuerda poner una # al principio de cada línea. Suele ser recomendable usar solo letras, números, guiones y guiones bajos, para evitar posibles errores de llamadas no deseadas al servidor.
#Comentario_de_archivo_htaccess
[^]
Especifica la clase de NO inclusión de caracteres. e. [^xyz] coincidirá cualquier caracter que no sea x, y ni z.
[a-z]
Un guión (-) entre dos caracteres dentro de una clase de caracteres ([]) denota el rango de caracteres entre ellos. ej. [a-zA-Z] coincide con todas las letras mayúsculas y minúsculas de la a la z.
()
Se usa para agrupar caracteres entre ellos, debiéndose considerar como una unidad. ej. (perecedero)?prensa coincide con prensa, con o sin el prefijo perecedero.
^
Denota el inicio de una cadena de prueba regex (regex = regular expression = expresión regular). ej. comienza el argumento con el carácter precedente.
$
Denota el final de una cadena de prueba regex (regex = regular expression = expresión regular). ej. finaliza el argumento con el carácter previo.
?
Declara como opcional el caracter precedente. ej. monzas? coincidirá con monza o monzas, mientras que mon(za)? coincidirá con mon o monza. ej. x? coincide con una o ninguna x.
!
Declara una negación. ej. “!cadena” coincide con cualquier cosa salvo con “cadena”.
.
Un punto (o periodo) indica cualquier carácter arbitrario único.
–
Instruye “NO” reescribir la dirección URL, como en “…domain.com.* – [F]”.
*
Coincide con cero o más caracteres precedentes. ej. usa “.*” como un comodín.
|
Declara un operador lógico “or”. Por ejemplo, (x|y) coincide con x o y.
Escapa caracteres especiales ( ^ $ ! . * | ). ej. usa “.” para indicar/escapar un punto literal.
.
Indica un punto literal (escapado).
/*
Cero o más barras.
.*
Cero o más caracteres arbitrarios.
^$
Define una cadena vacía.
^.*$
El modelo estándar para hacer coincidir todo.
[^/.]
Define que no sea barra o punto.
[^/.]+
Define cualquier número de caracteres que no sean ni barra ni punto.
http://
Esta es una afirmación literal — en este caso, la cadena literal de caracteres “http://”.
^dominio.*
Define una cadena que comienza con el término “dominio”, que pueden ir seguidos por cualquier número de caracteres.
^dominio.com$
Define la cadena exacta “dominio.com”.
-d
Comprueba si la la cadena es un directorio existente.
Preparando el archivo “.htaccess”
El archivo .htaccess nos permite pasarle información al servidor Apache para que cumpla ciertas reglas de configuración en la carpeta que lo contenga, por tal motivo debemos copiar este archivo en la carpeta que contengan los archivos php en los cuales realizaremos los cambios de URL:
RewriteEngine on
#4 variables
Rewriterule ^miphp/(.*)/(.*)/(.*)/(.*)$ miphp.php?$1=$2&$3&$4
#3 variables
Rewriterule ^miphp/(.*)/(.*)/(.*)/$ miphp.php?$1=$2&$3
#2 variables
Rewriterule ^miphp/(.*)/(.*)$ miphp.php?$1=$2
#1 variable
Rewriterule ^miphp/(.*)/$ miphp.php?$1
En la primera línea nos aseguramos de que esté activado el mod_rewrite en el Apache (si esto no funciona deberá comunicarse con su administrador para que active el módulo en el servidor).
NOTA: Si estas usando LocalHost puedes activarlo en httpd.conf
En las líneas 3, 5, 7 y 8 se establecen las reglas que nos permitirán transformar nuestras URL extensas en amigables. Analizaremos aquella que permite transformar dos variables, las demás son similares:
Rewriterule ^miphp/(.*)/(.*)/$ miphp.php?$1&$2
La expresión (Rewriterule) es la que nos permitirá escribir la regla en el Apache. La cadena (^miphp/(.*)/(.*)/$) permite escribirá la URL amigable, inicia desde el caracter ^ hasta el $. Y finalmente la cadena (miphp.php?$1&$2) es nuestro URL extenso. La transformación se hará de la siguiente manera:
De URL extensa: miphp.php?categoria=monitores&productoID=12345
De URL amigable: miphp/monitores/12345/
Como se puede apreciar la regla tomara el nombre del script y le quitara la extensión “.php” para tomarlo como un directorio (nótese la parte en negritas).
Como ya se habrá dado cuenta, los valores antecedidos por el símbolo dólar ($) en la parte de las URL extensas reemplazan a los (.*) de las URL amigables.
Bueno ya tenemos el archivo .htacces que nos permitirá lograr los resultados que deseamos a nivel del servidor, ahora procederemos a crear el script php que nos permita cambiar nuestras URL extensas en amigables sin tener que hacer ninguna modificación directa en los “N” enlaces que posea nuestro sitio web.
Creando el archivo PHP
En este script usaremos el metodo $_GET para que nos muestre las varibles y una imagen, si esta correcto los valores.
En este script pondremos dos valores que si cumple uno mire cumple el otro, y así mostrar la imagen correspondiente.
<?
//Llamamos las variables con $_GET.
$categoria = $_GET["categoria"];
$productoID = $_GET["productoID"];
if(isset($categoria)){//miramos que la variable "categoria" no este vacia.
if(isset($productoID)){//miramos que la variable "productoID" no este vacia.
switch ($categoria) {//hacemos un "switch" para mirar la categoria.
case 'monitores':
echo "El id del producto es" .$productoID." con la categoria ".$categoria;
echo '<img src="http://www.staging8.quecodigo.com/'.$productoID.'.png">';//abrimos la imagen con el id
break;
case 'teclados':
echo "El id del producto es" .$productoID." con la categoria ".$categoria;
echo '<img src="http://www.staging8.quecodigo.com/'.$productoID.'.png">';//abrimos la imagen con el id
break;
}
}else{//Lanzamos un errror si no hay id
echo "Debes especificar un id del producto";
}
}else{//Lanzamos un errror si no hay categoria
echo "Debes especificar una categoria del producto";
}
?>
En conclusión, este es un archivo bastante potente con el cual podemos hacer muchas cosas que se fueron indicando en el tutorial. También, puedes aprender los conceptos básicos de la programación o, incluso, tomar la decisión de qué hosting necesitas.
Y si quieres profundizar en tu educación, te recomendamos EDteam o Plazti. Las hemos usado internamente para nuestro equipo.