Práctica: URLs amigables con Apache
Cuando utilizamos utilizamos lenguajes de programación en el servidor y pasámos parámetros las URLs que generamos se dice que no son amigables. Es decir, que son difíciles de recordar y hacen que pierdan peso en la indexación de Google.
Ejemplo de url no amigable:
www.dominio.com/buscar.php?palabra=deporte
Ejemplo de url amigable:
www.dominio.com/buscar/deporte
Expresiones regulares:
^ Comienzo de la expresión
$ Final de la expresión
(valor1|valor2) valor 1 o valor 2
. Encuentra cualquier cosa
* ninguno o varios
+ uno o varios
() variables que van a ser utilizadas posteriormente
(.*) cualquier contenido
(.+) Cualquier contenido que tenga al menos una palabra
Terminaciones:
[L] Última regla
[R] Indica redirección
[NC] Para indicar que no se distinganentre mayúsculas y minúsculas
Ejemplos:
Rewriterule ^palabra/(.*)$ buscar.php?palabra=$1
Con dos parámetros. Si queremos paginar podemos pasar un segundo parámetro que nos indique el número de la página:
RewriteRule ^palabra/(.*)/(.*)$ buscar.php?palabra=$1&num=$2 [L]
Práctica: URLs amigables con Apache
La idea es que en lugar de utilizar ulr's no amigables como http://localhost/buscar.php?palabra=deporte utilicemos url's amigables como http://localhost/palabra/deporte.1.- Activamos el módulo mod_rewrite
a2enmod rewrite
Después editamos el fichero que tengamos en /etc/apache2/sites-available/default, sustituyendo
Options Indexes FollowSymLinks MultiViews
AllowOverride None
por
Options Indexes FollowSymLinks
MultiViews AllowOverride All
Instalamos php5
apt-get install php5-common libapache2-mod-php5
Creamos el programa /var/www/buscar.php
Es un programa que pasa como parámetro palabra con el método GET.
<form method="get" action="buscar.php"> <input name="palabra" value="<?php echo $_GET[palabra]; ?>"> <input type="submit" value="buscar" /> </form>
2.- Editamos el fichero /var/www/.htaccess
Options +FollowSymLinks RewriteEngine on RewriteRule ^palabra/(.*)$ buscar.php?palabra=$1 [L] RewriteRule ^aaa.html$ bbb.html [L]
Nota: Si en lugar de a ^palabra/(.*)$ ponemos ^buscar/(.*)$ no nos funciona.
3.- Realizamos la prueba en el navegador y vemos que las siguientes urls nos dan el mismo resultado:
http://localhost/buscar.php?palabra=deporte http://localhost/palabra/deporte
Ejemplo
El contenido del .haccess profesor de informatica.com
# le decimos dode esta la base RewriteEngine on Options +FollowSymlinks Options +SymlinksIfOwnerMatch # le decimos dode esta la base RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f ############################### html RewriteRule ^autor$ index.php?seccion=autor&url=autor [L] RewriteRule ^html/resultado/(.*)$ resultado.php?num=$1 [L] RewriteRule ^html/pruebalo/(.*)$ pruebalo.php?num=$1 [L] RewriteRule ^html/etiqueta/(.*)$ etiqueta.php?etiqueta=$1 [L] RewriteRule ^html$ index.php?seccion=html&url=introduccion [L] RewriteRule ^html/$ index.php?seccion=html&url=introduccion [L] RewriteRule ^html/(.*)$ index.php?seccion=html&url=$1 [L] RewriteRule ^css$ index.php?seccion=css&url=introduccion [L] RewriteRule ^css/$ index.php?seccion=css&url=introduccion [L] RewriteRule ^css/(.*)$ index.php?seccion=css&url=$1 [L] RewriteRule ^html5$ index.php?seccion=html5&url=introduccion [L] RewriteRule ^html5/$ index.php?seccion=html5&url=introduccion [L] RewriteRule ^html5/(.*)$ index.php?seccion=html5&url=$1 [L]