Zumbe.net

Comenzando a programar una web

Usar Mod Rewrite con htaccess para cambiar nuestras URL

A continuación lo que vamos a hacer es convertir páginas dinámicas en estáticas.

Las páginas dinámicas, como las hechas en PHP, pueden variar su contenido de un mismo archivo. Generalmente por variables enviadas por GET, es decir, explícitas en la URL. Un ejemplo:

ttp://zumbe.net/tutoriales/?t=19

En ese caso estamos accediendo a la noticia 19, porque en el script de PHP puede accederse a esa variable

Código: php
  1. <?php
  2. $variable = $_GET[‘t’] ;
  3. ?>

Pero esto no gusta a los Buscadores, ya que los resultados de búsqueda que ellos muestran podrían no corresponderse a la dirección , ya que es susceptible de cambiar en cualquier momento. Y eso a los buscadores les da mal rollo.

Creando el archivo .htaccess

Para crear el archivo .htaccess no necesitamos ninguna herramienta especial ni nada sofisticado, con el bloc de notas o cualquier herramienta parecida bastará.

La primera línea que tenemos que insertar es la que indica que vamos a usar MOD_REWRITE y lo habilita.

Código: htaccess
  1. Options +FollowSymLinks
  2. RewriteEngine on

Y ahora vamos a poner nuestras normas para las URL, usando instrucciones Rewriterule. Para ello usaremos expresiones regulares

Expresiones regulares más importantes:

^ : Comienzo de una cadena
$ : Fin de una cadena
(.*) : Cualquier texto

Imaginemos que quiero que a un directorio cuando se escriba noticia/2.html se dirija a noticia.php?n=2

Nos bastaría con incluir en nuestro archivo .htaccess la siguiente línea:

Código: htaccess
  1. Rewriterule ^noticia/(.*)\.html$ noticia.php?n=$1

Voy a explicar paso a paso lo que pone en esa línea:

  1. Rewriterule indica que lo que vamos a hacer es una instrucción rewriterule
  2. ^ indica que es el comenzamiento de la URL que va a crear.
  3. noticia/ es el falso directorio que vamos a crear.
  4. (.*) indica que ahi puede ir cualquier cadena de texto alfanumérica, desde un número (3,7,425,…) hasta una palabra (a,abcd,qwerty,…)
  5. \. el punto es una expresión regular, asi que para que se tome como punto y no como expresión regular hay que “escaparlo” con la barra invertida
  6. html la extension que hemos decidido que ponga, podríamos poner cualquier otra (.asp, .culo, .mp3) aunque serán falsas extensiones y no se ejecutarán como tales. También puede no ponerse extensión.
  7. $ indica que es el final de la URL que va a generar
  8. noticia.php?n= la auténtica URL a la que va a dirijirse
  9. $1 hace referencia a lo que contiene el primer paréntesis en el patrón.

Y ya está.

Notas finales

Podemos tener un archivo .htaccess en cada carpeta o directorio, con diferentes órdenes.

Si queremos usar más de una variable en las URL, sólo tenemos que usar diferentes paréntesis, y para hacerles referencia usar el número que ocupan como nombre de variable. Ejemplo:

Código: htaccess
  1. Rewriterule ^noticia/(.*)/(.*).html$ noticia.php?seccion=$1&noticia=$2

Un ejemplo práctico

Este es el archivo .htaccess que uso actualmente para la sección de tutoriales:

Código: htaccess
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3. Rewriterule ^cat-(.*)\.html$ index.php?s=$1
  4. Rewriterule ^(.*)\.html$ index.php?t=$1

Referencia: http://www.peoplecnc.com/mod_rewrite_basico.html

3 Agosto 2006 · Tags Estándares, Sin categoría |

21 Comentarios

roberto dice:

Mi pregunta es: en esta seccion: “Rewriterule ^cat-(.*)\.html$ index.php?s=$1″ como verificas el valor de s ??

Acaso se hace dentro del archivo index.php, un isset($_GET[’s’]) ??


6 de Junio del 2007 a las 6:32
admin dice:

Si con verificar te refieres a comprobar que no está vacío, puedes hacerlo de muchas formas. Las más recomendables:

if(!empty($_GET[’s’])){ … instrucciones; }
if($_GET[’s’]) { …instrucciones; }
if($_GET[’s’] != ”){ …instrucciones; }

Cada comprobación cambia con un pequeño matiz, pero vienen a comportarse igual.


6 de Junio del 2007 a las 13:02
Already Taken - Tutoriales, Wordpress themes, Wordpress plugins, Layouts y mucho mas... dice:

[…] La verdad no pille la forma de explicar esta opcion de .htaccess asi que les hago referencia a un tutorial que les puede explicar este tema mas ampliamente.Tutoriales Zumbe […]


23 de Julio del 2007 a las 23:17
Rogelio dice:

¿ésto funciona con caracteres latinos?
áéíóúú ÁÉÍÓÚ ¡¿


24 de Julio del 2007 a las 22:12
Jaime dice:

Esta excelente tu explicación la voy a probar.. mi caso es que quiero dar a cada miembro de la comunidad creandose un subdominio (su página web promocional) el hosting me da ilimitado, el asunto es que a la direccion miembro.midominio.com llega a un index.html en la carpeta creada por cpanel pero necesito redireccionar a otra página en otras carpetas y no se como enviar la variable $vali, creo que tu explicación esta clara gracias por tus enseñanzas, otra cosa si se puede pedir, puedo crear los subdominios sin recurrir a mi cpanel, es decir con algun script php?

Jaime Mongrut Farro


21 de Agosto del 2007 a las 0:40
admin dice:

Hola Jaime.
Que yo sepa no es posible, pero no sabría asegurártelo.


21 de Agosto del 2007 a las 0:46
Jaime dice:

Hola nuevamente, si escribo en la barra miembro.midominio.com el se dirige al index.html que tengo en /html_public/miembro o al .htacces gracias

Jaime Mongrut Farro
www.lareddorada.com


21 de Agosto del 2007 a las 1:40
Jaime dice:

Gracias admin… y sobre la última…

Jaime Mongrut


21 de Agosto del 2007 a las 1:54
Alan dice:

Hola…es posible redireccionar a alguna pagina escribiendo por ejemplo: www.pagina.com/miscosas, donde me tome “miscosas” como el valor para redireccionar? Lo que no se como hacer es que no me tome en cuenta los directorios o archivos existentes. Se entiende? si podes me escribis al mail? Gracias…


22 de Noviembre del 2007 a las 22:42
pateketrueke dice:

mmm… a mi me ha fallado un poco:

Rewriterule ^(.*)\.html$ index.php?section=$1 [L,QSA]

* me devuelve un error 404 (como si realmente existiera el archivo html)

¿como hago para evitarlo y que funcione correctamente? ¿que hay que cambiar? ¿Apache? ¿ideas?


14 de Diciembre del 2007 a las 5:37
Tutorial .htaccess - Segunda parte » Omar Corrales dice:

[…] asi que les hago referencia a un tutorial que les puede explicar este tema mas ampliamente.Tutoriales Zumbe Escrito el 3 de January, 2008 Categoria: Tutorial General Webdevelopment Feed de […]


4 de Enero del 2008 a las 4:07
danraf77 dice:

q ocurre si pongo mi .htaccess en mi directorio principal? es decir cuando ponga. www.dominio.com/contacto.php, NO QUIERO Q SE DIRIJA A www.dominio.com/porfiles.php?id=CONTACTO.PHP


20 de Enero del 2008 a las 15:50
¿Qué son las Rewrite Rules? : Sinctrl - Lo hemos perdido dice:

[…] más clara de entender. Esta no pretende ser una guía muy extensa del mod_rewrite, si quieres ampliar información puedes verla en la Wikipedia y el sitio de Apache, así como las directivas de […]


14 de Abril del 2008 a las 11:02
Gabriel dice:

hola estoy creando un script de fotolog multiusuario y no me funciona ningun tipo de .htaccess por que siempre tengo que crear carpetas diferentes y me dicen que eso es muy malo para el servidor que se pondra muy lento y todo eso y quiero saber como hacer parano crear carpetas cualquier cosa a gabriel_taltal@hotmail.com


23 de Abril del 2008 a las 1:36
admin dice:

Gabriel, tendrás que definir mejor tu pregunta.

Si quieres usar .htaccess puedes leer este tutorial, o buscar similares.

Si tu server no te permite crear .htaccess, habla con tu hosting, cámbiate de hosting, o resignate.

Un saludo.


24 de Abril del 2008 a las 0:37
Germán dice:

Muy buenas. Tengo una pequeña duda.
Tengo implementado el mod_rewrite en mi web:
http://www.alquiberia.es
Pero tengo un problema cuando supero las 10 variables. Todo funciona perfectamente mientras no supere las 10 variables.
Por ejemplo:
Rewriterule ^([^/]+)-([^/]+)/([^/]+)-([^/]+)/([^/]+)-([^/]+)/([^/]+)-([^/]+)\.html$ index.php?$1=$2&$3=$4&$5=$6&$7=$8 [NC,L]

Funciona perfectamente pero si supero las 9 variables falla y mezcla el valor de las variables.

Alguna sugerencia???

Gracias


1 de Mayo del 2008 a las 19:12
Bit-Revolution » Blog Archive » Usar Mod Rewrite en Apache con .htaccess dice:

[…] Tutorial Mod Rewrite […]


13 de Mayo del 2008 a las 3:36
lean dice:

hola, mi problema es este..
estoy haciendo una comunidad de usuarios, y qe tengan perfiles cada uno..

para ver los perfiles de cada usuario tenes que escribir esto:

http://localhost/profile.php?ID=chikocupado
o
http://localhost/profile.php?ID=1

yo lo que quiero hacer es que cuando se escriba:
http://localhost/chikocupado

entre al perfil..

como tendria que escribir el .htaccess

asi esta mi .htaccess :
php_flag register_globals Off

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]
RewriteRule ^([A-Za-z0-9_-]+)$ profile.php?ID=$1 [QSA,L]

——-

desde ya muchas gracias :)


18 de Mayo del 2008 a las 23:20
yair dice:

hola yo tengo un problemota tengo un sistema a la hora de hacer mis paginas las guarde todas con extension .php y estoy usano el vertrigo entonces de manera local en mi computadora me corre bien ya hace todo lo que quiero el sistema pero a la hora de subirlo alservidor de la escuela no puedo hacceder por que el codigo html que tengo en mi pagina php no lo abre por que debe de estar en html que puedo hacer si alguin sabe me seria de mucha ayuda mi mail es yair_bls@hotmail.com


12 de Junio del 2008 a las 0:31
Diego dice:

Excelete aporte el de lean. Ahora, digo yo… será posible que en vez de redirigir http://escribe.us/carpeta redirigir http://carpeta.escribe.us ? Muchas gracias!


11 de Julio del 2008 a las 22:30
Nicolas dice:

He visto que utilizar la barra en algunos casos da problemas, generalmente en las ultimas versiones de apache, sustituyendolo por un guión funciona perfectamente. No he encontrado información sobre el tema. Alguen sabe algo?


14 de Julio del 2008 a las 12:32

Escribe un comentario!

Buscador

2005-2007 Zumbe.net Creada por Alex Barros con WordPress - Licencia Reconocimiento - RSS