.htaccess

Introducción

El archivo .htaccess es un simple archivo de texto que Apache usa para tener algunas reglas sobre los directorios y los archivos. Resumiendo, este contiene determinadas directivas que obligan al servidor de web a actuar según los usuarios, así como a definir otras reglas para los documentos.

Las características más utilizadas por los desarrolladores de sitios web, son aquellas que ayudan a la optimizacion de las url, control de trafico en una web, bloqueo de usuarios, y algunas otras que ya iremos viendo paso a paso.

Aunque también existen muchisimas funcionalidad que pueden aplicarse, pero desde ya para usuarios algo más avanzados. Si necesitan más información deberás ingresar directamente al tutorial de Apache y extraer los datos de la fuente original.

Primera regla

El uso que la mayoría de los webmasters le da al .htaccess, es la posibilidad de optimizar el nombre de sus URLs, ocultando tediosas variables, que a Google no le gustan mucho.

El ejemplo mas solicitado de este problema, es el que presentan los portales prefabricados, como PHP-Nuke, Xoops, y muchos otros, donde cada sección de la página, se accede a traves de una larga fila de variables, que resultan imposible de memorizar, tanto para nosotros, como para la mayoría de los buscadores.

Si quisieramos ocultar algunas variables, tendríamos que hacer algo como esto:

RewriteEngine on
RewriteRule seccion/([_0-9a-z-]+)/([_0-9a-z-]+)/ pagina.php?var1=$1&var2=$2

Con este pequeño ejemplo, le estamos diciendo a nuestro servidor, que cuando alguien solicite la url: seccion/recomendanos/10, tendrá que abrir en realidad: pagina.php?var1=recomendanos&var2=10

El formato [_0-9a-z-] significa que puede esperar letras, números y guiones (bajo y medio), y el + a costado de la regla, indica que cada valor dado, debe tener como mínimo, un carácter de largo.

También es posible reglas de la siguiente manera:

  • [0-9]: solamente números.
  • [0-9]{4}: números de 4 cifras.
  • ([0-9]{1,2}: números de 1 y 2 cifras.
  • (.*): cualquier expresión.
  • [a-z]: solamente letras.
  • [a-z]{1,10}: palabras entre 1 y 10 caracteres.

Si por alguna razón, cuando subes tu htaccess a tu sitio web, este presenta un Error 500, es porque alguna de las reglas que has escrito, presenta errores de sintaxis y hasta que no lo modifiques, no podrás acceder a tu sitio correctamente.

Personalización de Errores

La forma de personalizar los que ofrecen los exploradores es bastante fácil. La sintaxis es bastante básica, y acá va un ejemplo para personalizar el bendito Error 404 - “Pagina no Encontrada”.

Redirección Local

RewriteEngine On
ErrorDocument 404: error404.php

Redirección Externa

RewriteEngine On
ErrorDocument 404: http://www.otrapagina.com/arhivo.php

En este archivo error404.php o archivo.php (le podes poner el nombre que quieras) estará el contenido que vos quieras que se muestre cuando alguien llegue a ese error en tu página.

Esta es quizás la regla más utilizada por los desarrolladores de sitios webs, pero se pueden personalizar todos los errores, y creanme que son muchos. :D
También se puede optar por mostrar un mensaje de error emergente, si cambiamos el dirección de nuestro archivo, por el mensaje entre comillas (”mensaje”).

RewriteEngine On
ErrorDocument 404 "La pagina solicitada no existe"

Siempre que estemos personalizando errores de la pagina tiene que ir la directiva ErrorDocument seguida del código del error.

Hot Link

El hot linking, es lo que se produce cuando desde nuestra pagina, linkeamos imagenes, videos, etc, que están publicados sobre otra página, o lo que es peor, sobre un servidor a cargo de otra persona, lo que equivale a un hurto de su trasferencia mensual, que se traduce como un gasto muy grande en el servicio de hosting.

Podemos impedir que estos usuarios tengan links (generalmente img) sobre sus paginas, con nuestros archivo, si colocamos esta pequeña regla:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?vbracco.com.ar(/)?.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|bmp)$ http://www.vbracco.com.ar [R,NC]

Con esto, le decimos al servidor, que la única forma de mostrar las imagenes de nuestro sitio, es que el HTTP REFERER sea nuestra propia página. De cualquier otra forma, se mostrará la molesta X sobre la imagen, como si no existiera.

Podríamos incluso, en vez de mostrar la X de error, disponer una imagen en blanco, o lo que nosotros quisieramos para mostrar cada vez que se linkee una imagen desde otro sitio.

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?vbracco.com.ar(/)?.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|bmp)$ images/nohotlink.jpg [L]

También, podemos descartar o agregar extensiones de archivos que no quieres que te linkeen, como archivos de video o de sonido, pero siempre con la barra separadora |.

Lo que no podemos hacer, es redireccionar una imagen en hot link, a una pagina web, ya que daría error de inconsistencia.



64 Comentarios en “.htaccess”

Gravatar de jose

Resta Suma jose
7 de Mayo de 2006 a las 4:29 am    

Fucking TROLL!

Muy bueno tu artículo, me gustaría saber algo sobre htaccess, ¿como se puede restringir el acceso a un archivo sólo desde otro del mismo dominio? por ejemplo, un archivo de configuración que use un script (con claves, etc) ¿se puede restringir para que sólo el script o los scripts propios del sitio tengan accesso?

Gravatar de Sabo

Resta Suma Sabo
7 de Mayo de 2006 a las 2:11 pm    

Fucking TROLL!

¿Qué tipo de archivo queres restringir?

Gravatar de Johans

Resta Suma Johans
6 de Junio de 2006 a las 12:16 am    

Great Comment!

Mira, muy interesante tu articulo, pero ya probe esos comandos y no me funcionan , ese para
RewriteEngine on
Rewrite Rule seccion/([_0-9a-z-]+)/([_0-9a-z-]+)/ pagina.php?var1=$1&var2=$2
lo qeu hace es tirarme un error
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@fashionlifela.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

——————————————————————————–

Apache/1.3.34 Server at http://www.fashionlifela.com Port 80

Que sera?

Gravatar de Sabo

Resta Suma Sabo
6 de Junio de 2006 a las 7:16 am    

Fucking TROLL!

Perdón Johans, había un error de tipeo.
La condición RewriteRule se escribe todo junto, y justo es ese ejemplo había un espacio entre medio, pruebalo ahora.

Saludos.

Gravatar de DH-1

Resta Suma DH-1
13 de Junio de 2006 a las 2:10 pm    

Great Comment!

Muy bueno tu artículo. Cuento con una página web, la cual tiene harto de tráfico, y me linkean muchos de mis zips, exce’s y demás’es. Quisiera saber si se puede hacer algo con eso. Digo, redireccionar cuando intenten descargar ese archivo hacia otra hoja que yo tenga. No sé si me entendéis. Muchas gracias.

Gravatar de Sabo

Resta Suma Sabo
14 de Junio de 2006 a las 4:17 pm    

Great Comment!

No estoy seguro como hacer una redirección si proviene de otra web, pero si te digo como bloquear la descarga.
Agrega en tu .htaccess la siguiente regla:

SetEnvIfNoCase Referer "^http://www.tuweb.com/" locally_linked=1
SetEnvIfNoCase Referer "^http://www.tuweb.com$" locally_linked=1
SetEnvIfNoCase Referer "^http://tuweb.com/" locally_linked=1
SetEnvIfNoCase Referer "^http://tuweb.com$" locally_linked=1
SetEnvIfNoCase Referer "^$" locally_linked=1
<filesmatch ".(exe|zip)$">
Order Allow,Deny
Allow from env=locally_linked
</filesmatch>

Espero que te funcione.

Gravatar de edson1ve

Resta Suma edson1ve
24 de Junio de 2006 a las 1:42 pm    

Fucking TROLL!

# -FrontPage-

IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*

order deny,allow
deny from all
allow from all

order deny,allow
deny from all

AuthName nombre.com.ve
AuthUserFile /home/www/vhosts/nombre.com.ve/httpdocs/_vti_pvt/service.pwd
AuthGroupFile /home/www/vhosts/nombre.com.ve/httpdocs/_vti_pvt/service.grp

este es mi archivo, como puedo hacer un redireccionamiento desde aca sin alterar el comportamiento… este es de un sistema xoops.

este me interesa para el SSL ya que no lo uso aun

Gravatar de Marcelo

Resta Suma Marcelo
31 de Julio de 2006 a las 5:16 pm    

Fucking TROLL!

muy bueno el articulo, yo tengo una pregunta, quiero hacer un rewrite rule para un listado con paginacion:

quiero que quede asi, ej.:

/manuales/id34/php/ (pagina 1)
/manuales/id34/php/1/ (tambien pagina 1)
/manuales/id34/php/2/ (pagina 2)
/manuales/id34/php/3/ (pagina 3)
…. (etc.)

Hay una forma de hacerlo? porque intente pero no me sale:

RewriteRule manuales/(.*)/(.*)/(.*)/$ /manuales/listado.php?id=$1&tit=$2&pag=1

Con esa regla me sale error al poner sin el /1/ de paginacion, intente poner dos reglas, una debajo de la otra pero tampoco va. Existe algo para agregar o alguna forma de hacerlo?

Ojala puedan ayudarme! GRacias!

Gravatar de Sabo

Resta Suma Sabo
31 de Julio de 2006 a las 5:52 pm    

Fucking TROLL!

Si se puede Marcelo. Por lo que veo debes generar tres reglas en tu .htaccess, una para cada caso posible.

La primera (ubicada más arriba en el .htaccess) debe ser la más larga o compleje de todas, y hace abajo, las más simples.
La primera, para cuando alguien llama a: manuales/id34/php/3/ luego para: manuales/id34/php/ y por último para manuales/id34/

La más compleja, podrías ser algo así:

RewriteRule manuales/id([0-9]{1,})/(.+)/pag/([0-9]{1,}) manuales/listado.php$1&tit=$2&pag=$3 [L]

Con eso tienes una idea para que sigas trabajando.

Gravatar de Marcelo

Resta Suma Marcelo
9 de Agosto de 2006 a las 10:33 pm    

Fucking TROLL!

Excelente! la verdad que muy bueno, funciona perfecto. Ahora una pregunta mas si me lo permiten :D, se puede aplicar un 301 para no perder estas paginas en google? Intente con un [R=301] al final pero no me funciona bien, como que se rompe todo.

Gracias nuevamnete, la verdad que se pasan.

Gravatar de Sabo

Resta Suma Sabo
10 de Agosto de 2006 a las 8:45 am    

Fucking TROLL!

También se puede, solo poné un [R=301,L] al final de cada regla.

[…] Ahora que ya tenemos los nuevos nombres para los ficheros .html y .php, tenemos que hacer algo para que nuestros ficheros antiguos apunten a los nuevos. Me explico: en mi caso la web ya llevaba un par de años online, por lo que las páginas ya estaban bien indexadas en los buscadores y existian enlaces externos desde otras páginas. Por lo que no me interesaba cambiar en nombre de los ficheros (.html y .php) sin más. Si hubiese hecho el cambio sin más habría perdido muchas visitas, ya que si por ejemplo tengo una página que se llama Descargar-Utiles-Sistema-Aida32.html y la cambio por descargar-aida32.html, todos los enlaces que apunten a Descargar-Utiles-Sistema-Aida32.html se perderán y con ellos bastantes visitas. Así que esta claro que lo que interesa es cambiar el nombre de los ficheros, pero haciendolo de tal manera que los ficheros con nombre antiguo redirijan hacia los ficheros con nombre nuevo. De esta manera cuando alguien teclee en su navegador http://www.utilidades-utiles.com/Descargar-Utiles-Sistema-Aida32.html el navegador “aterrizara” en la página http://www.utilidades-utiles.com/descargar-aida32.html. Así conseguimos no perder visitas y cambiar el nombre de los ficheros .html y .php. Para redirigir las páginas he usado el fichero .htaccess. Con este fichero (que se pone en el servidor) he conseguido que todas las páginas antiguas redirijan a las nuevas. Un ejemplo de lo que contiene el .htaccess sería lo siguiente: RewriteCond %{HTTP_HOST} ^www.utilidades-utiles.* RewriteCond %{REQUEST_URI} /Descargar-Utiles-Sistema-Aida32.html RewriteRule ^(.*)$ http://www.utilidades-utiles.com/descargar-aida32.html [R=permanent,L] En mi caso el fichero .htaccess contiene 1932 líneas. Esta claro que el fichero lo he generado mediante un script en PHP que generé para este caso en concreto. […]

Gravatar de Emiliano

Resta Suma Emiliano
12 de Septiembre de 2006 a las 3:05 pm    

Fucking TROLL!

Hola, se puede con el .htaccess redireccionar una dominio que tiene una ip pública asignada a otra ip pública sin modificar el dominio.

O sea:
Si yo escribo http://www.midominio.com/ quiere que el navegador en realidad navegue http://200.10.10.10/ pero que en el navegador muestre http://www.midominio.com/

y ademas que entienda que todo lo que se le escriba luego se interpretado de la misma manera, con varios subdirectorios.

Si se puede necesitaria un poco de orientación y si no se puede como lo hago.

Desde ya muchísimas gracias y perdón por las molestias

Gravatar de Sabo

Resta Suma Sabo
13 de Septiembre de 2006 a las 4:35 pm    

Fucking TROLL!

No se si es posible hacer eso que tu pides, o por lo menos no está a mi alcance.

Con esto, haces algo parecido, solo que el usuario notará el cambio en la url:

RewriteEngine on
RewriteRule ^(.*)$ http://200.10.10.10/1 [R=permanent,L]

Saludos.

Gravatar de Paco

Resta Suma Paco
19 de Septiembre de 2006 a las 11:47 am    

Great Comment!

Hola, levo mucho timepo buscando informacion al respecto, y cuadno la encuentro es aqui por fin¡¡ y es que me gustaria crear dicho archivo con este ejemplo de “redireccion”, http://www.miweb.com/modules.php?op=modload&name=UpDownload&file=index me encantaria poderlo redirecionar a y asi poderse sobre todo mejor indexar y recordar como http://www.miweb.com/modules/descargas o algo mas o menos parecido y sobretodo permitido muchiisimas gracias

Gravatar de Kunshi

Resta Suma Kunshi
20 de Septiembre de 2006 a las 2:50 pm    

Great Comment!

Wenas! Primero felicitarte por el tutorial. Bien a lo que vamos, tengo en httpd.conf el AllowOverride ALL y phpinfo me dice que mod_rewrite está cargado. Creo el .htaccess en /var/www pero no hay manera de que me muestre un 404.php para el error. Pruebo con un .htaccess malo en /var/www/hta pero no me da error 500.

¿Qué puede estar pasando? Te paso una copia del fichero entero:
#Paginas propias para errores
RewriteEngine On
ErrorDocument 404: 404.php
ErrorDocument 403: "No se puede mostrar.

# redirect foro.estalia.es to http://www.estalia.es/foro

Options +FollowSymlinks
RewriteBase /

RewriteCond %{HTTP_HOST} foro.estalia.es$
RewriteCond %{REQUEST_URI} !foro/
RewriteRule ^(.*)$ foro/$1

# Evita Robo de Imagenes
RewriteCond %{HTTP_REFERER} http://www.estalia.es/
RewriteRule ^(.*)$ http://www.estalia.es/

Un saludo y gracias!

Gravatar de Nestor Santos

Resta Suma Nestor Santos
21 de Septiembre de 2006 a las 2:56 pm    

Fucking TROLL!

Me parece muy interesante la nota.
yo hace rato que quiero hacer unos cambios en mi web, tengo notas subidas a mi porta que las muestra como /index.php?newid=id que es el id de la noticia en la base de datos
ahora, yo lo que necesito es que me muestre en la url el titulo de la nota, por ejemplo sistema_de_musica_funcional_y_buscapersonas.
como debo hacerlo con el htaccess?
desde ya muchas gracias por cualquier ayuda que me puedan dar.
Saludos
Nestor

Gravatar de Sabo

Resta Suma Sabo
21 de Septiembre de 2006 a las 4:43 pm    

Fucking TROLL!

Nestor, lo más práctico que podes hacer, es en una nueva columna en la misma tabla donde estan tus notas, donde guardes el nombre “amigable” para esa nota (léase, el nombre que va a ir en la URL).

Y en tu .htaccess:

RewriteEngine on
RewriteRule nota/(.+) index.php?nombre_amigable=$1

Solo te resta programar tu index, para que busque por el ‘nombre amigable’ en vez de por el ID.

Gravatar de Mano

Resta Suma Mano
28 de Septiembre de 2006 a las 7:14 pm    

Fucking TROLL!

Instale el xoops 2.0 en mi hosting y para evitar que sea tan vulnerable instale el modulo protector.
El problema es que me pide lo siguiente:
———————————————————————

register_globals’ : on INSEGURO

Esta configuración permite ataques de inyección
Si su servidor lo soporta, agrege o edite un fichero .htaccess o php.ini en el directorio raiz de su Xoops, incluyendo esta línea:

/home/vu000043/public_html/.htaccess
php_flag register_globals off

‘allow_url_fopen’ : on INSEGURO

Esta configuración permite que ejecuten scripts (pequeños programas) ajenos en su servidor de alojamiento, sin su conocimiemto.
Si tiene acceso (solo administradores del alojamiento), modifique el httpd.conf. O si su servidor lo soporta, agrege o edite un fichero .htaccess o php.ini en el directorio raiz de su Xoops:
* Ejemplo de httpd.conf, incluya esta línea:
php_admin_flag allow_url_fopen off

Hice el .htaccess pero cuando lo subo al host me aparece error en la pagina.
Alguien me podria decir como lo tengo que armar exactamente ? Desde ya muchas gracias.
Mano.

Gravatar de Jorge

Resta Suma Jorge
3 de Octubre de 2006 a las 1:26 pm    

Fucking TROLL!

Al poner el codigo en el .htaccess del root para que no linkeen una imagen desde fuera de mi web y salga una imagen personalizada me sale un error 500 :-( Se me queda asi el codigo:


AddHandler application/x-httpd-php .html
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?recursos-online.com(/)?.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|bmp) $ imagenes/varias/nolink.jpg [L]

¿Que puede ser?

Gravatar de Sabo

Resta Suma Sabo
3 de Octubre de 2006 a las 1:52 pm    

Great Comment!

Jorge, aparentemente el único error que noto es el espacio entre las extensiones (gif|jpg|jpeg|bmp) y el signo $. Fijate en el ejemplo, que ese espacio no existe.
Tambien se me ocurre que podrías poner la ruta completa de la imagen a mostrar.

Gravatar de Jorge

Resta Suma Jorge
4 de Octubre de 2006 a las 3:42 am    

Fucking TROLL!

Muchas gracias. Sí era eso. No se por qué razón se me pondrían los espacios en blanco :-( Ahora ya funciona perfectamente. Felicidades por el manual

Gravatar de Carlos Vasconcelos

Resta Suma Carlos Vasconcelos
7 de Octubre de 2006 a las 11:53 pm    

Great Comment!

Hola, trate de usar tu codigo pero no me jala, yo puse:

RewriteEngine on
RewriteRule ([_0-9a-z-]+)/([_0-9a-z-]+)/ index.php?sec=$1&cancion=$2

mi link seria

http://70.87.94.162/~cancione/index.php?sec=letra-de&cancion=4

pero yo supuse que con el codigo htacces podria hacerlo

http://70.87.94.162/~cancione/letra-de/4/

si me puedes ayudar lo agradeceria

Gravatar de Ana Machado

Resta Suma Ana Machado
13 de Octubre de 2006 a las 4:07 am    

Great Comment!

Hola:
nosotros tenemos ya un archivo htaccess que utilizamos para hacer redirecciones pero nos encontramos con el siguiente problema:

por motivos de facilidad a la hora de dar la dirección a medios de comunicación (somos una ONG) queremos que el enlace actual que lleva al catalogo: http://www.survival.es/catalogo/catalogo.html pudiera ser con una redireccion http://www.survival.es/catalogo pero cuando incluimos la redirección en el archivo htaccess no nos funciona.

¿es por ser un html?
¿tendríamos que poner un php que nos redirigiera al html y en el htaccess la redirección hacerla al php?
¿si así fuera, como sería el php que redirigiera al html?

Muchas gracias por adelantado y un saludo,

Gravatar de Sabo

Resta Suma Sabo
13 de Octubre de 2006 a las 11:38 am    

Great Comment!

Ana, no debería haber ningún problema con el tipo de archivo que quieras redireccionar.
Se me ocurren 2 posibles soluciones:

  • Una redirección:
    Redirect permanent /index.html http://www.survival.es/catalogo.html
  • Nuevo Index: Esto va a cambiar la configuración de ese directorio, y cuando por defecto entrando a /catalogo/ se ejecuta un index.html, ahora por defecto se va a ejecutar catalogo.html y no te hace falta ninguna redirección:
    Directory Index catalogo.html
Gravatar de Ana Machado

Resta Suma Ana Machado
13 de Octubre de 2006 a las 1:37 pm    

Fucking TROLL!

Hola:

el problema para nosotros es que el archivo http://www.survival.es/catalogo/catalogo.html no es el index.html de dicho directorio (catalogo) que está por debajo del raiz.

¿Aún así es posible hacer algo para que al poner en la dirección http://www.survival.es/catalogo salte a http://www.survival.es/catalogo/catalogo.html?

Muchas gracias por tu interés,

Gravatar de Sabo

Resta Suma Sabo
16 de Octubre de 2006 a las 11:50 am    

Fucking TROLL!

Ana, por lo que puedo ver en http://www.survival.es/catalogo/ devuelve un “File Not Found”, por lo que imagino que no existe el archivo declarado como Index de ese directorio entonces debería ser perfectamente posible redefinirlo por catalogo.htm

Además te recuerdo, que podes tener tantos .htaccess como directorios tenga tu sitio web, por lo que no te debes de preocupar si esta muy por debajo del raiz.

Si no podes hacer esta redefinicion y la redirección no te resulta factible, podes crear un archivo php (obiamente tiene que ser index.php) y en su interior:

header("Location: catalogo.html");

Con ese archivo se hace una redirección sencilla desde PHP.

Suerte.

Gravatar de John Jaiver

Resta Suma John Jaiver
24 de Noviembre de 2006 a las 11:39 am    

Great Comment!

Hola Sabo gracias por el tutorial, pero tengo un problema, no he podido lograr echar andar esto, tengo el modulo mod_rewrite cargado segun observe en el info.php, igualmente tengo mi archivo .htaccess y en este tengo lo siguiente

Options +FollowSymlinks
RewriteEngine On
ErrorDocument 404: error404.php

quice comenzar con ese primer ejemplo pero cuando hago el llamado a una pagina que no existe no me abre la pagina error404.php si no que simplemente me aparece el nombre de la pagina osea error404.php es como si no la pudiera interpretar, pero el php si interpreta paginas php

agradezco si me das una manito

Gravatar de Rafa

Resta Suma Rafa
28 de Noviembre de 2006 a las 3:13 pm    

Fucking TROLL!

Hola, a ver si me pueden ayudar (gracias de antemano):

Estoy intentando poner en un servidor una web con Apache y quiero que se vean todos los archivos en el navegador si no encuentra un index.html, es decir, navegar por los archivos desde el explorador Firefox por ejemplo.

Por ejemplo en un subdirectorio llamado “images” para lo cual meto un archivo creado con el bloc de notas llamado “.htaccess” (no sé si es correcto) y escribo en él “Options Indexes”.

Configuro en el httdp.conf la línea:

AllowOverride All

porque venía a “None” y he leído que eso habilita los .htaccess

Es correcto lo que intento hacer?
No se supone que viene por defecto la navegación de archivos en Apache?

Gravatar de Krlos

Resta Suma Krlos
2 de Diciembre de 2006 a las 2:25 pm    

Fucking TROLL!

Hola.
Mira tengo una inquietud con respecto a

RewriteEngine on
RewriteRule seccion/([_0-9a-z-]+)/([_0-9a-z-]+)/ pagina.php?var1=$1&var2=$2

con eso dices que la URL de consulta seria así:

seccion/recomendanos/10

ya pero digamos si yo no quiero usar la barra “/” para separar, si no que quiero el punto “.” como lo aria

RewriteEngine on
RewriteRule seccion.([_0-9a-z-]+).([_0-9a-z-]+) pagina.php?var1=$1&var2=$2

y la consulta de URL seria asi

seccion.recomendanos.10

Bueno ya le intente y me tira error. lo deseo hacer para crear un whois, haber si me das una mano… espero tu respuesta

Gravatar de Andrew

Resta Suma Andrew
6 de Diciembre de 2006 a las 9:51 am    

Fucking TROLL!

Hola sabes tengo un problema cuando quiero ejecutar un archivo .php en el navegador me sale si deseo descargar el archivo, cómo arreglo eso? para que se pueda ejecutar en el explorador

Gravatar de Sabo

Resta Suma Sabo
6 de Diciembre de 2006 a las 10:34 am    

Fucking TROLL!

@John Jaiver: la página error404.php la tenés creada y con el mensaje correspondiente en su interior no?

@Rafa: Deberías consultar con tu proveedor de hosting. Parece ser que estas haciendo lo correcto para mostrar los archivos.

@Krlos: es “casi” correcto. Lo único que tienes que escapar los puntos de separación.
RewriteEngine on
RewriteRule seccion\.([_0-9a-z-]+)\.([_0-9a-z-]+) pagina.php?var1=$1&var2=$2

Sin poner la contrabarra antes del punto, actua como comodin, es decir que admite cualquier caracter.

@Andrew: Seguramente deberás configurar correctamente los MimeTypes en tu cuenta de hosting o correjir los encabezados de ese archivo php.

Gravatar de Sergio

Resta Suma Sergio
6 de Diciembre de 2006 a las 4:52 pm    

Fucking TROLL!

Hola Sabo:

Espero q me puedas ayudar. Tengo montado un phpnuke en mi hosting, pero accidentalmente borre el archivo .htaccess que tenia. Ahora el problema es que si chekeo el sitio desde el Firefox, la pagina anda bien, pero si lo hago del IE no muestra la pagina, queda como que se va a abrir y nada, pero el el firefox veo sus estadisticas y aumenta casi 1000 clicks cada vez que chekeo en IE. Osea que me da la impresion que se redirecciona a si mismo infinitamente. Esto de .htaccess es muy avanzado para mi ya que recien me inicio en diseño web, y la verdad que necesito una solucion urgente ya que nadie puede ver mi sitio ya que todos usan IE. Tambien lo chekee desde una mac, nose el nombre de su navegador pero tampoco anda. Desde ya agradezco tu ayuda. Saludos. Sergio

Gravatar de kaxhy

Resta Suma kaxhy
13 de Diciembre de 2006 a las 3:05 pm    

Fucking TROLL!

Buenos Dias

Tengo un problema que me trae de cabeza. A ver si con tu sabiduría (que veo que en este tema es bastante) me puedes ayudar.

Tengo una base de datos con Nick y quiero que si el usuario pone http://www.web.com/kaxhy se le redireccione a http://www.web.com/index.php?kaxhy sin tener que crear una carpeta para cada usuario y en ella realizar la redirección que si solo son 30 puede pero si son 5000 ya son muchos

Intente poner en el .htaccess el siguiente código en el archivo que crea el .htaccess

RewriteRule http://www.web.com/“.$row[’nick’].” http://www.web.com/moyto/index.php?“.$row[’nick’].” [L]

y va ser que no va ni para tras :(

Gravatar de Sabo

Resta Suma Sabo
13 de Diciembre de 2006 a las 3:10 pm    

Fucking TROLL!

@Kaxhy, dentro del .htaccess no se pueden poner instrucciones de ningún lenguaje de programación.

Algo así te podría servir:
RewriteRule http://www.web.com/([_0-9a-z-]+) http://www.web.com/moyto/index.php?$1 [L]

Gravatar de kaxhy

Resta Suma kaxhy
14 de Diciembre de 2006 a las 5:09 am    

Fucking TROLL!

El php que utilizo es para crear el archivo .htaccess quedándome de la siguiente forma el archivo en el servidor:

DirectoryIndex index.php
RewriteRule http://www.web.com/kaxhy http://www.web.com/moyto/index.php?kaxhy [L]
RewriteRule http://www.web.com/Manu http://www.web.com/moyto/index.php?Manu [L]
RewriteRule http://www.web.com/Salva http://www.web.com/moyto/index.php?Salva [L]
….

Pero me sale error 404.He probado tu versión y también me sale el error 404.

No pensé que podía ser tan difícil ya que el WordPress parece que funciona de esta manera.

Gracias por la ayuda.

Gravatar de Sabo

Resta Suma Sabo
14 de Diciembre de 2006 a las 5:33 am    

Fucking TROLL!

@kaxhy
Con una sola línea, haces la regla general, para cualquier usuario. No es necesario que crees una línea especifica para cada uno.


RewriteEngine on
RewriteRule http://www.web.com/([_0-9a-z-]+) http://www.web.com/moyto/index.php?1 [L]

No se si tenías la linea que marqué con negrita, pero es fundamental para que funcione. Por otro lado, si te aparece un error 404 es que hay algo que no existe.

Gravatar de kaxhy

Resta Suma kaxhy
14 de Diciembre de 2006 a las 6:20 am    

Fucking TROLL!

Gracias por la ayuda, efectivamente no tenia puesto el RewriteEngine on

Pero aun así necesito poner en el .htaccess todos los nick ya que de la otra manera me recoge todas las paginas que tengo en la carpeta raiz. y el archivo no es tan pesado al final unos simples 280kB :).

Tambien lo he simplificado ponindo solo
DirectoryIndex index.php
RewriteEngine on
RewriteRule kaxhy index.php?usu=kaxhy [L]
RewriteRule Manu index.php?usu=Manu[L]

Para que pese menos que con toda la ruta.

Nuevamente muchisimas gracias por la ayuda.

Gravatar de Diego

Resta Suma Diego
20 de Diciembre de 2006 a las 10:16 pm    

Fucking TROLL!

Muy interesante el articulo.
Estoy nuevo en esto del htaccess, y actualmente tengo un problema.
Yo utilizo una pagina (html) que hace post a un php, encargado de enviar un correo. Es simplemente un mail de contacto.
Me informan en el hosting que este archivo xxx.php se esta utilizando para generar spam.
La consulta seria:
Es posible utilizar el htaccess para que unicamente se autorize el post que provenga desde mi pagina? y si uno copia la direccion con los valores, la misma no se autorize, es decir no envie el correo?
Desde ya muchas gracias pr la ayuda, y si sabe de algun “TIP” para realizarlo, se lo agradezco, Saludos

Gravatar de Sabo

Resta Suma Sabo
20 de Diciembre de 2006 a las 10:33 pm    

Fucking TROLL!

Facil, sin utilizar nada algun .htaccess

En tu archivo PHP (el que envía los correos) incluí algo parecido a esto:

if($_SERVER['HTTP_REFERER']=="http://www.tupagina.com/laotra.html")
{
// Los procesos para enviar el correo
} else {
die("GGGRRRRRRRR!!! Maldito spammer");
}

Con eso, la unica forma de que se procese el pedido del armado del correo es que el pedido provenga de http://www.tupagina.com/laotra.html. Si viene de otro lado, le mostras un mensaje y nada más.

Gravatar de Diego

Resta Suma Diego
21 de Diciembre de 2006 a las 12:36 pm    

Fucking TROLL!

Muchas gracias por la respuesta.
Solamente un inconveniente, el php, es utilizado por n paginas, por lo que se direcciona de diferentes .html.

Nuevamente muchas gracias por la pronta respuesta, Saludos

Gravatar de Sabo

Resta Suma Sabo
21 de Diciembre de 2006 a las 1:40 pm    

Fucking TROLL!

Podes hacer un filtro para cualquier página de tu dominio, algo así:

$tudominio = "http://www.tupagina.com";
if(substr($_SERVER['HTTP_REFERER'],0,strlen($tudominio))==$tudominio)
{
// Los procesos para enviar el correo
} else {
die("GGGRRRRRRRR!!! Maldito spammer");
}

La única forma de que se ejecute, es que la url del que pide el pedido, comienze con tu propio dominio y te aseguras que solo vos lo podes usar.

Gravatar de Daniel

Resta Suma Daniel
28 de Diciembre de 2006 a las 9:11 pm    

Fucking TROLL!

Hola. Pues mira, no pretendo causar molestías ni mucho menos, pero tengo un problemita y me gustaría saber qué puedo hacer. El asunto es que digamos que tengo un “archivo.html” en el directorio “dir” de forma que la URI es: http://midominio.com/dir/archivo.html; me gustaría saber cómo le puedo hacer para que lo que se muestre en la barra de direcciones sea http://midominio.com/dir/archivo/.
Bueno, espero que no sea mucha molestía y de antemano gracias.
Nos vemos.

Gravatar de Daniel Cantero

Resta Suma Daniel Cantero
29 de Diciembre de 2006 a las 9:33 pm    

Fucking TROLL!

Hola tengo un problema en mi web no se ven las imagenes q estan en un cms llamado myegallery y el host me da permiso para variar eso porque ellos no pueden tocar su htacces me podrias ver una solucion por favor porque no entiendo mucho de htacces la pagina es http://www.cybertite.com/cybertite/

Gravatar de Roberto Mendoza

Resta Suma Roberto Mendoza
7 de Enero de 2007 a las 1:47 am    

Fucking TROLL!

Hola, soy nuevo usando WordPress y me he topado con un problema, para la instalación del plugin WP-dbmanager necesito modificar los permisos del archivo .htaccess, pero he descubierto que no lo tengo, ya entré a gestionar -> archivos y al hacer clic sobre .htaccess me marca este msj:

“¡El archivo no existe! Compruebe el nombre e inténtelo nuevamente, gracias.”

He tratado de crear el archivo y subirlo por medio de ftp, pero no me deja.
Me preocupa porque he leído que este archivo es muy importante.

Espero puedas ayudarme y decirme una posible solución, gracias.

Gravatar de Sabo

Resta Suma Sabo
7 de Enero de 2007 a las 2:24 pm    

Fucking TROLL!

@Roberto: a veces muchos programas FTP no te dejan trabjar correctamente con ese archivo por el nombre. Para tenerlo fácilmente, subi un archivo “htaccess.txt” y cuando ya este en tu servidor, renombralo a “.htaccess” y listo.

Gravatar de Marcelo

Resta Suma Marcelo
24 de Enero de 2007 a las 9:40 pm    

Fucking TROLL!

Victor, viendo que sos un geniol del htaccess quería hacerte una consulta:

Yo publico los sites de demostración para mis clientes en un subdirectorio /clientes/sitex/ para que puedan ver mientras se desarrolla.
Ahora, lo que quiero evitar es la copia de esos archivos, sea por programas spider o manualmente, es decir evitar la descarga de los SWF, imágenes, páginas PHP, archivos JS, etc.

¿Que debo poner en el htaccess para lograr esto y donde debe ir el archivo htaccess, en el root o en el directorio a proteger?

Desde ya muchas graciaspor compartir tus conocimientos.

Gravatar de Nicolas

Resta Suma Nicolas
2 de Febrero de 2007 a las 4:53 am    

Fucking TROLL!

Hola,

tengo una duda con el .htaccess. Hago un rewrite para cuando se encuentra el error 404 de la manera

ErrorDocument 404: paginanoencontrada.html

Todo funciona perfecto, excepto que me gustaría saber que escribe el usuario en la url para poder saber si hay algun enlace de la web que no funciona.

Con las estadísticas veo el referer de la paginanoencontrada.html pero no se que enlace es y, la mayoría de veces el error se produce al escribir la página directamente, sin entrar en ninguna otra pantalla.

¿Como puedo saber lo que escribe el usuario antes de lanzar el error 404?

Gravatar de Pablo Gonzalez

Resta Suma Pablo Gonzalez
27 de Febrero de 2007 a las 8:01 am    

Fucking TROLL!

Te hago una pregunta, yo tengo el webmail por ssl, mi pregunta es, como hago para que las peticiones que lleguen a http plano se vallan a https…
Ya probe con

RewriteEngine on
RewriteRule ^(.*)$ https://mail.netports.com.ar/1 [R=permanent,L]

Y me tira que las cokies no estan limpias…. sera algo mio ?

Gracias

Gravatar de Wilmer

Resta Suma Wilmer
30 de Marzo de 2007 a las 1:25 am    

Fucking TROLL!

muy bueno tu articulo, te tengo una pregunta, no se si son el htaccess puedas crear un subdominio … a lo que me voy hacer algo asi …. http://www.miweb.com/blog/index.php?nick=nombre accedan desde esta direccion http://www.nombre.miweb.com Muchas gracias.

Gravatar de francisco

Resta Suma francisco
2 de Junio de 2007 a las 9:57 pm    

Fucking TROLL!

Hola que tal amigo: mi problema es que tengo un sistema de upload, pero no funciona bien, cuando hago clic en un enlace me sale error 404. pero el script en otro servidor si funciona pero en el mio no. SERA porque dento del script tengo un archivo .htaccess que dice:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ index.php?d=$1&BAD_HOSTING=%{HTTP:Authorization} [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^(.*)$ index.php?%1&d=$1&BAD_HOSTING=%{HTTP:Authorization} [L]

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule (.+).php $1.php?%1&BAD_HOSTING=%{HTTP:Authorization}

php_value post_max_size 500M
php_value upload_max_filesize 500M
php_value memory_limit 500M

MI PREGUNTA ES COMO HAGO PARA EJECUTAR ESTAS INSTRUCCIONES PARA QUE FUNCIONE BIEN MI PROGRAMA, SI GUSTAS PUEDES DEJAR LA RESPUESTA EN MI LIBRO DE VISTAS DE MI WEB GRACIAS…

Gravatar de Angel

Resta Suma Angel
5 de Junio de 2007 a las 1:18 pm    

Fucking TROLL!

Hola, antes que nada felicitarte es un muy bueno este site y sobre toda esa proactvidad para compartir tus conocimientos. Veras estuve navegando por toda la red y llegue aqui el unico lugar que me ha dado luz a mi problema veras: Intento que apache me muestre ciertas paginas y tomcat otras y para eso tengo:
RewriteEngine on
RewriteRule ^(.*)(png|jpg|gif|css|js)$ /$1$2 [NC,L]
RewriteRule ^/(.*)$ /miaplicacion/$1 [PT,QSA,NC,L]

pues quiero que las paginas estaticas las resuelva apache y las dinamicas tomcat.

Que debo hacer!!!!!!!
Ah el .htaccess lo tengo que poner en el dentro del directorio htdocs o en el conf? si tienes un ejemplo please dimelo.

Gracias de Antemano y sigue colaborando con el pueblo!!!!!

Gravatar de Arturo Ojeda Dominguez

Resta Suma Arturo Ojeda Dominguez
26 de Octubre de 2007 a las 12:33 am    

Fucking TROLL!

es muy interesante, pero tengo una duda a ver si alguien me la podra resolver
tengo 2 dominios… uno se llama http://www.ieiac.org y otro http://www.acerh.com.mx , ambos estan en un mismo server, ahora, mi pregunta es… puedo hacer que:
http://www.ieiac.org me envie a un directorio dentro del server (/public_html/IEI/)
y
http://www.acerh.com.mx sea la principal??(/public_html/IEI/)

gracias

Gravatar de Juanjo

Resta Suma Juanjo
15 de Noviembre de 2007 a las 7:51 am    

Fucking TROLL!

Gracias a tu tutorial he podido usar correctamente el rewrite para hacer urls amigables, muchas gracias!

Gravatar de jose

Resta Suma jose
29 de Febrero de 2008 a las 5:44 pm    

Fucking TROLL!

Hola, excelente sitio no lo conocia, necesito ayuda urgente por favor.
Estuve metiendo mano en el .hatccess y no se si me mande alguna macana, no se como es el original ahora del servidor.
La cuestion es que cuando tipeo http:www.trackermania.com.ar me va a http://trackermania.com.ar/a
O sea le quita www y va al directorio a
Ayuda por favor, desde ya muchas gracias.

Gravatar de rojerh jaramillo

Resta Suma rojerh jaramillo
29 de Marzo de 2008 a las 9:31 am    

Fucking TROLL!

hola amigo tengo un portal en xoops pero las url son complicadas quisera saber si es posible hacer que meidante un .htaccess estos puedan ser mas amigables con los buscadores he intentado varias pero no doy .. podrias dejarme un ejemplo especifico con xoops te dejo mi url http://www.huaral.net/comunidad

Gravatar de Eduardo

Resta Suma Eduardo
9 de Septiembre de 2008 a las 5:03 pm    

Fucking TROLL!

Hola sabes me agrada bastante tu block, ojala me puedas ayudar en esto.
Mira te comento he instalado el phplist en mi espacio web, el punto es que a la hora de mandar mi boletin a los correos de mis contactos las imagenes no se pueden visualizar asi mismo el texto enriquecido no aprece con los colores deseados sale todo en formato normal, lei por ahi que eso se debe a un problema de permisos o algo asi que debe configurarse en el htaccess, agradeceria que me puedas decir como y en cual htaccess por que yo aqui en mi carpeta ya instalada veo varios claro en directorios distintos.
Realmente te lo agradeceria si me ayudas con esto. Gracias
BYE

Gravatar de pablo

Resta Suma pablo
25 de Marzo de 2009 a las 1:05 am    

Fucking TROLL!

hola… estoy probando la directiva “SymLinksIfOwnerMatch”
es muy interesante que un usuario pueda entrar a una carpeta y luego, acceder unicamente al directorio cuyo nombre es “igual” al que usó para loggearse.
Mi pregunta es esta… si un usuario “usuario01″ ingresa a http://www.ejemplo.com/carpetamadre/ y una vez alli vé todas las carpetas pero solo podrá acceder al directorio “usuario01″… es posible que una vez loggeado…sea redirigido directamente al directorio?
o sea… “usuario01″ se loggea en http://www.ejemplo.com.ar/carpetamadre/ y automaticamente es redirigido mediante alguna directiva en .htaccess a http://www.ejemplo.com.ar/carpetamadre/usuario01/.
Esto permitiría enviar a diferentes usuarios a sus diferentes directorios… se podrá?

Gravatar de novatec

Resta Suma novatec
9 de Mayo de 2009 a las 9:31 am    

Fucking TROLL!

Hola, yo estoy intentando quitar solo la extension .php de todas las paginas pero no lo consigo.

Si ahora tengo http://www.mipagina.com/carpeta/pagina1.php
y lo que busco es esto: http://www.mipagina.com/carpeta/pagina1

lo he intentado así:

RewriteEngine on
RewriteRule ^carpeta/([^/\.]+).php$ /carpeta=$1 [L]

creo que estoy cerca pero no lo consigo,
alguna ayuda?

alguien me ayuda porfavor?
muchas gracias,

Gravatar de tony

Resta Suma tony
24 de Mayo de 2009 a las 3:49 am    

Fucking TROLL!

hey antes que todo, debo agradecer por este tutorial que me ha servido de mucho y esta bastante bueno, sin embargo el ejemplo del htacces me funciona a media, tengo un problemita y me gustaria por favor que me ayudaran, estuve usando el codigo asi

RewriteRule ([_0-9a-z-]+) index.php?usuario=$1 [L]

y funciona perfectamente para algo asi misitio.com/usuario

pero dentro de los usuarios hay secciones con paginacion lo que en codigo php seria asi
misitio.com/?usuario=$nombre&page=$pagina

trate de usar siguiendo este ejemplo
RewriteRule ([_0-9a-z-]+)/([_0-9a-z-]+)/ pagina.php?var1=$1&var2=$2

para que muestre algo asi misitio.com/usuario/2 pero no funciona, no muestra la pagina siguiente, muestra la misma. y en algunas casos cuando pongo una nombre antes de ([_0-9a-z-]+)/ entonces me muestra la pagina sin imagenes

bueno muchas gracias ante mano por la ayuda, que de verdad ya tengo bastante tiempo trabajando en este htacces y aun no logro que funciono correctamente :(

Gravatar de Alex

Resta Suma Alex
15 de Agosto de 2009 a las 10:25 am    

Hola,

quisiera saber cómo hacer para que según el nombre de usuario y contraseña que se introduzcan se acceda a una carpeta o a otra.

Lo necesito para que a cada cliente en concreto (con su nombre de usuario y contraseña correspondientes) se le muestre sólo su información.

Muchas gracias por tu ayuda.

Saludos,

Àlex

Gravatar de dariocab

Resta Suma dariocab
2 de Septiembre de 2009 a las 2:21 pm    

Great Comment!

Hola, estoy probando esto y no me funciona cambiar las variables..

Puse asi:

RewriteEngine on
RewriteRule seccion/([_0-9a-z-]+)/ index.php?m=hosting
ErrorDocument 404: http://www.google.com

El del error que te redirige a google anda perfecto, pero el tema de las variables no… directamente me muestra asi:
http://www.miweb.com/index.php?m=hosting

en vez de asi:

http://www.miweb.com/seccion/hosting

que puse mal? ya probe de todas formas y nada.. :S

Gravatar de luis

Resta Suma luis
7 de Junio de 2010 a las 11:14 am    

Fucking TROLL!

Hola amigo, una consulta yo solo e bloqueado, con el htaccess para que no se miren los arechivos por web, pero me sale un mensaje al intentar arir ejemplo

http:://192.168.1.69/images/

Index of /images

ese al que rer entrar por link m esale este mensaje bueno ya esta bloqeado, pero me gustaria cambia ese mensaje que no salga Index of image, por ejemplo puede modificarlo algi asi

Url no Aurorizado Por Administrador de Redes

algo asi o otrop mensaje

Gravatar de León

Resta Suma León
29 de Mayo de 2011 a las 5:14 pm    

Muy interesante el articulo hace tiempo que busco un paginador en php que incluya un archivo htaccess.

Deja tu comentario...

XHTML: Tags permitidos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Sitio con MyComments Puedes seguir las respuestas a tus comentarios con MyComments.