Como implementar URL amigables

Creado por   el 2015-03-11 00:07:28


Como su propio nombre lo indica las URL amigables son aquellas que son más fáciles de recordar para el usuario ya que no están formadas con las acostumbradas cadenas compuestas de variables GET.
También su uso se justifica por fines estratégicos para mejorar el posicionamiento de nuestro sitio web, esto ocurre por una cuestión de semántica debido a que los buscadores favorecen el indexado de este tipo de URL frente a las URL convencionales o no semánticas.

Para crear nuestras URL amigables utilizaremos un módulo de apache llamado mod_rewrite, el cual nos permitirá reescribir las URL al vuelo.

En este artículo revisaremos solo algunas directivas de este módulo, las que nos permitirán reescribir nuestras URL, pueden ver la documentación completa del módulo en el link oficial.

http://httpd.apache.org/docs/current/mod/mod_rewrite.html

Así se ven las URL convencionales.
http://www.mipagina.com/index.php?seccion=noticias&id_noticia=360

Así se ven las URL amigables.
http://www.mipagina.com/noticias/360/url-amigables

Lo primero que tenemos que hacer crear o editar el archivo .htaccess el cual se encuentra en la raíz de nuestro sitio, el archivo .htaccess es un fichero de configuración utilizado por el servidor apache.

Para que esto funcione debemos tener el módulo rewrite activado en apache, puedes comprobarlo con la función phpinfo() desde PHP.

code: php
<?php
phpinfo(INFO_MODULES);
?>


Bien nuestro archivo .htaccess debe quedar de esta manera.

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^.*$ index.php [L]

Las primeras líneas son para configurar algunas directivas de apache como permitir los enlaces simbólicos, activar la reescritura de URL y establecer la base.

Nos centraremos en la línea RewriteRule ^.*$ index.php [L]

^ Denota "el principio" del argumento.
. Un punto (o periodo) indica cualquier carácter arbitrario único.
* Indica que el carácter, cadena o grupo anterior puede estar presente cero o más veces
$ Denota "el fin" del argumento.
[L] Last rule (Última Regla): instruye al servidor para frenar la reescritura tras procesar la directiva precedente.

Entonces ^.*$ este patrón se traduce en que una cadena puede comenzar por cualquier carácter y puede terminar con cualquier carácter, incluso puede ser una cadena vacía.

Lo que logramos hacer es reescribir cualquier URL redirigiéndola al archivo index,php logrando de esta manera tener un control centralizado de nuestro sitio.
Todo lo demás se debe gestionar desde PHP por ejemplo una cadena como la siguiente:

www.mipagina.com/noticias/360/url-amigables
siempre será direccionada a index.php

index.php
code: php
<?php
print_r($_SERVER['REQUEST_URI']);
#Imprime
#/noticias/360/url-amigables
?>

Como ven es muy fácil recuperar toda la información de la URL se pueden obtener todos los datos de la petición mediante la variable $_SERVER['REQUEST_URI'], ya en este punto podemos recomponer las variables GET con absoluta libertad.

index.php
code: php
<?php
#print_r($_SERVER['REQUEST_URI']);
$segments = explode('/', $_SERVER['REQUEST_URI']);
$seccion = $segments[1];
$id_noticia = $segments[2];
echo "seccion = $seccion<br />id_noticia = $id_noticia";
#Imprime
#seccion = noticias
#id_noticia = 360
?>

Por lo general el nombre de la noticia es opcional, si se quiere incluir el titulo en la URL lo correcto sería cargar el articulo segun su id desde la base de datos, recuperar el titulo y luego compararlo con el de la URL para asegurarnos que el articulo no ha cambiado de nombre, previniendo de esta manera tener URl duplicadas que son penalizadas por los buscadores en sus resultados.

Existen varias formas de implementar URL amigables en nuestro sitio pero a mi parecer esta es una de las mas simples y eficientes.

Como evitar el hotlinking

Creado por   el 2015-03-04 15:58:49


Hot-linking es un término utilizado en Internet y significa que alguien está enlazando archivos alojados en nuestro servidor con la finaliadad de utilizarlos en otro sitio consumiendo recursos de nuestro servidor.

Por ejemplo tenemos una imagen alojada en nuestro servidor y alguien copia la URL de esta imagen y la utiliza para mostrar la misma imagen pero en otra página, comúnmente en foros, por lo que estaría usando el ancho de banda de nuestro sitio, esta mala práctica afecta la eficiencia de nuestro sitio, ralentizando la carga de nuestra página y aumenta el costo del servicio de hosting ya que necesitaremos contratar una mayor cuota de transferencia de datos.

Afortunadamente existen algunas tecnicas que nos permiten evitar esta mala práctica, para los sitios que usan Apache como servidor web tendremos que modificar o crear el archivo .htacces
Abrimos el archivo con nuestro editor de texto, y agregamos las siguientes líneas al final del archivo.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www.)?richardcollao.cl*/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www.)?richardcollao.cl*$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp|zip)$ - [F,NC]

No olvides reemplazar "http://www.richardcollao.cl" por la URL de tu sitio web.

• NC nocase
El empleo de NC significa que la directiva Rewrite será aplicada de manera no sensitiva, es decir no diferencia entre minúsculas y mayúsculas.
• F forbidden
Hace que se devuelva a la petición del cliente un mensaje de acceso denegado "403 Forbidden".

Con esta configuración se bloquearán todos los accesos a cualquier archivo con las siguientes extensiones: jpg, jpeg, gif, png, bmp y zip

Siempre que la petición provenga desde fuera de nuestro dominio, y devolverá un mensaje de error 403 Acceso denegado.

Otra técnica muy utilizada es mostrar una imagen específica, por lo general algún tipo de advertencia o publicidad en vez del error 403, para esto utilizaremos el siguiente código.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www.richardcollao.cl*/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} ^http://.*$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ http://i58.tinypic.com/mr4uoh.jpg [NC,R,L]



Puedes incluir cualquier otra extensión de archivo que quieras proteger.

Para que esto funcione debemos tener el módulo rewrite activado en apache, puedes comprobarlo con la función phpinfo() desde PHP.

code: php
<?php
phpinfo(INFO_MODULES);
?>


Sino está cargado modificaremos el archivo httpd.conf el cual se encuentra dentro del directorio conf de apache
Buscamos y descomentamos la siguiente línea:

#LoadModule rewrite_module modules/mod_rewrite.so


Guardamos los cambios y reiniciamos el servidor de Apache y ya tendremos el módulo rewrite cargado.

Es importante mencionar que la mayoría de los servicios de hosting incluyen esta opción dentro de su cPanel, pero siempre es importante saber cómo funcionan las cosas, también hay que tener cuidado si tenemos más directivas en el archivo .htacces ya que por lo general las soluciones automáticas suelen generar conflictos.

Y esto es todo, espero que este articulo les haya sido de ayuda.

Crear virtual Host en Apache con Xampp

Creado por   el 2015-02-28 16:32:59


Crear un host virtual puede ser útil por varias razones, una de las más comunes es que nos permitirá hacer pruebas de nuestros sitios de manera local utilizando exactamente la misma URL de nuestro sitio alojado en un servidor remoto, accederemos a nuestro sitio con URL como www.misitio.com en vez de utilizar subdominios sobre el localhost como localhost/misitio/ lo cual podría generar algunos conflictos de redirecciones y problemas con URL amigables, enlaces relativos, etc.

Para crear nuestro servidor virtual necesitaremos tener instalado apache por lo tanto utilizaremos el paquete Xampp que es un software libre multiplataforma, el cual de manera predeterminada nos instalara el servidor Apache, PHP, MySQL y algunos otros servicios.

Podemos descargar Xampp directamente desde el siguiente enlace
https://www.apachefriends.org/es/index.html

Su instalación es bastante sencilla, solo debemos seguir el asistente de instalación por lo que no necesita mayor explicación, una vez instalado el paquete Xampp continuaremos con la creacion de nuestro servidor virtual.

Lo primero que debemos hacer es modificar el archivo Host.
En Windows lo abriremos con el block de notas, si utilizando alguna distribución Linux como Debian puedes utilizar nano, mousepad, gedit o el editor de texto que prefieras.

Nota: Las rutas de los archivos corresponden a las versiones de windows 7 y Debian Wheezy para otros sistemas operativos buscar las rutas correspondientes en google.

En Windows:
C:\Windows\System32\drivers\etc\host
En Linux:
/etc/hosts

Al final del archivo host agregamos las líneas de las redirecciones correspondientes a nuestro servidor virtual, en mi caso quedara de esta manera.

Nota: todo lo que esta precedido de una almoadilla # son comentarios de ayuda y no son interpretados por apache.

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
# Mi primer virtual host
127.0.0.1 www.richardcollao.cl

Guardamos los cambios y cerramos el archivo.

Los siguiente será editar el archivo httpd.conf

En Windows:
C:\xampp\apache\conf\httpd.conf
En Linux:
/opt/lampp/apache/conf/httpd.conf

Buscamos y descomentamos (quitar almoadilla #) la siguiente línea:
# Include conf/extra/httpd-vhosts.conf
Quedando de esta manera, por lo general esta línea en las últimas versiones de apache ya se encuentra descomentada.
Include conf/extra/httpd-vhosts.conf

Guardamos los cambios y cerramos el archivo.

Solo falta modificar el archivo httpd-vhosts.conf

En Windows:
C:\xampp\apache\conf\extra\httpd-vhosts.conf
En Linux:
/opt/lampp/apache/conf/extra/httpd-vhosts.conf

En Xampp existe una carpeta llamada htdocs que es la carpeta por defecto donde se encuentran los sitios como el index de Xampp, PHPMyAdmin, etc. Perfectamente podríamos crear una subcarpeta dentro de esta para nuestro servidor virtual pero lo recomendable es utilizar una ruta dentro de nuestra carpeta personal de usuario. Por ejemplo:

Para Windows sería:
C:\Users\usuario\www\richardcollao
En Linux:
/home/usuario/www/richardcollao

De esta manera creamos una carpeta contenedora por lo general llamada www que es donde pondremos nuestros sitios web, teniendo esto claro, abrimos el archivo httpd-vhosts.conf y al final del archivo agregamos las siguientes líneas:

En windows quedaría de esta manera.

<VirtualHost *:80>
DocumentRoot "C:\xampp\htdocs "
ServerName localhost
</VirtualHost>

<VirtualHost *:80>
DocumentRoot " C:\Users\usuario\www\richardcollao"
ServerName www.richardcollao.cl
<Directory " C:\Users\usuario\www\richardcollao">
AllowOverride all
Require all granted
</Directory>
</VirtualHost>

En Linux quedaría de esta manera.

<VirtualHost *:80>
DocumentRoot "/opt/lampp/ htdocs "
ServerName localhost
</VirtualHost>

<VirtualHost *:80>
DocumentRoot " /home/usuario/www/richardcollao"
ServerName www.richardcollao.cl
<Directory "/home/usuario/www/richardcollao ">
AllowOverride all
Require all granted
</Directory>
</VirtualHost>

Guardamos los cambios y cerramos el archivo.

Solo una aclaración final, como podemos ver el nuevo servidor virtual www.richardcollao.cl a diferencia de servidor localhost, contiene la directiva <directory> que lo que hace es otorgar permisos a la ruta donde se encuentra nuestro sitio ya que este se encuentra fuera de la ruta por defecto htdocs por lo tanto no hereda sus permisos, sino hacemos esto nos devolverá un error 403.

Acceso prohibido!
Usted no tiene permiso para accesar al directorio solicitado. No existe un documento índice, o el directorio está protegido contra lectura.


Estamos listos, reiniciamos el servicio apache y podemos trabajar en nuestro servidor virtual.
Servidor Web más utilizado, con mayor número de instalaciones a nivel mundial, es un proyecto de código abierto y uso gratuito, multiplataforma.
Conjunto de datos de un mismo contexto y almacenados sistemáticamente para su posterior uso.
Lenguajes que hacen referencia al codigo de marcado para la elaboración de páginas web.
Potente lenguaje de programación orientado a objetos, independiente del sistema operativo.
Lenguaje interpretado orientado a objetos desarrollado por Netscape que se utiliza en millones de páginas web y aplicaciones de servidor en todo el mundo
Sistema operativo de software libre inspirado en el sistema Unix, escrito por Linus Torvalds con la ayuda de miles de programadores en Internet
El modelado 3D es el proceso de desarrollo de una representación matemática de cualquier objeto tridimensional a través de un software especializado. Al producto se le llama modelo 3D
Lenguaje de programación principalmente orientado al desarrollo web, su código es ejecutado del lado del servidor.
Todo lo que no sea trabajo, solo temas recreativos para divertirse.