Manual básico de Apache mod_rewrite

Tal como dice en la documentación de PHP, el módulo mod_rewrite es la auténtica navaja suiza de la manipulación de URLs.
Esta librería nos permite hacer desde simples redirecciones entre páginas a complejas reescrituras de URLs de nuestros sitios web. Para su utilización es recomendable tener conocimientos básicos en expresiones regulares.

Redirección básica:

Imaginemos la siguiente situación. Hemos creado una página web llamada lista.html pero queremos que los visitantes que escriban listado.html o directorio.html vean igualmente la página lista.html. Se presentan dos alternativas:

a) La solución cutre. Crear las páginas directorio y listado y dentro de ellas hacer una redirección con Javascript al estilo location.href="lista.html".

b) La solución ideal. Hacer una redirección mediante mod_rewrite especificando unas sencillas instrucciones en el famoso archivo .htaccess que se debe guardar en la misma carpeta donde se aloja lista.html. El servidor Apache traducirá ‘listado’ y ‘directorio’ por ‘lista’ sin tener que crear dichas páginas y su correspondiente redirección.


RewriteEngine on
RewriteRule ^(listado|directorio).html$ lista.html [R]

Básicamente, la sintaxis es:
RewriteRule patron sustituto [opciones]

[opciones]
r -> Mensaje Forbiden 403.
L -> Last rule, si tiene exito no ejecutar las siguientes reglas.
R[=code] -> Redirección.
NC -> No case(no distingue mayúsculas de minúsculas).

Explicación:
– “^(listado|directorio)”: nombre de URL que empiece por listado o directorio.
– “.html$”: que termine en “.html”.

Pasar de dirección estática a dirección dinámica:


RewriteEngine on
RewriteRule ^colores/([0-9]+)/([0-9]+)/([0-9]+).php$ colores.php?red=$1&green=$2&blue=$3

Donde ([0-9]+)/ significa 1 o más caracteres numéricos seguido de una barra.

Con esta regla conseguiríamos pasar de una URL desagradable como:

colores.php?red=50&green=20&blue=100

a una URL mucho más elegante:

colores/50/20/100.php

Hotlinking:

O cómo evitar que nos roben contenidos y ancho de banda linkando directamente nuestros recursos desde otros sitios web.


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?midominio.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ - [F,L]

Explicación:
– El signo ‘!’ significa negación, con lo que decimos que si el REFERER es diferente de nuestro dominio no permitimos enlazar archivos gif, jpg o png.
– (www\.)? indica que puede o no haber ‘www.’ en el nombre de nuestro dominio.
– El signo ‘-’ hará que no redirija a la vez que [F] hará que se muestre un mensaje de error. Normalmente se redirige a otra imagen de advertencia de que se está haciendo hotlinking, pero eso también nos hace perder ancho de banda.
– HTTP_REERER es una variable del servidor que nos dice el valor de la URL que solicita el recurso de nuestro servidor.

Superar límites de subida de archivos de php.ini con .htaccess

La subida de archivos en PHP suele estar limitada a 2 megas por motivos de seguridad. Si no fuese así cualquiera podría subir un archivo de 500 gigas y saturarnos el servidor.

La configuración de estos parámetros se encuentra en el archivo principal de configuración de PHP, el famoso php.ini.
En teoría sería tan simple como abrir este archivo y editar a nuestro antojo los valores que nos interesan:

upload_max_filesize 10M
post_max_size 10M
max_execution_time 100
max_input_time 100

Pero esto no siempre es posible ni recomendable. Si tenemos nuestra web alojada en un hosting compartido no nos van a dejar tocar el archivo php.ini y por otro lado, si tenemos varios dominios o subdominios en el mismo servidor puede que no queramos ser tan generosos en todos. Lo mejor es ser siempre lo más restrictivo posible y habilitar un mayor tamaño de subida únicamente donde nos interesa.

Esto lo podemos conseguir alterando los valores de configuración de PHP mediante un archivo .htaccess.

En primer lugar tenemos que comprobar que tenemos la opción AllowOverride activada ya sea en general o para ese subdominio. Para ello editamos el archivo de configuración de Apache, el famoso httpd.conf.

Si queremos aplicarlo de manera general:

<Directory />
Options FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
</Directory>

O en una carpeta concreta:

<Directory «c:/wamp/www/micarpeta»>
Options FollowSymLinks
AllowOverride All
Order deny,allow
Deny from allg
</Directory>

Una vez configurado Apache, creamos un archivo de texto con el nombre .htaccess que contendrá simplemente lo siguiente:

php_value upload_max_filesize 100M
php_value post_max_size 100M
php_value max_execution_time 1000
php_value max_input_time 1000

En este ejemplo se ha puesto un límite de subida de 100 megas y a su vez se aumenta el tiempo límite de ejecución del script a 1000 segundos. Será necesario variar el límite de tiempo a un valor razonable para que dé tiempo suficiente para subir el archivo y procesarlo.
Mediante este método se pueden modificar muchos más parámetros de configuración de PHP como las global_register y otras pero os dejo que lo investiguéis vosotros.

La biblia del servidor Apache

El servidor HTTP Apache es un software (libre) servidor HTTP de código abierto para plataformas Unix (BSD, GNU/Linux, etc.), Windows, Macintosh y otras, que implementa el protocolo HTTP/1.1 [1] y la noción de sitio virtual. Cuando comenzó su desarrollo en 1995 se basó inicialmente en código del popular NCSA HTTPd 1.3, pero más tarde fue reescrito por completo. Su nombre se debe a que Behelendorf eligió ese nombre porque quería que tuviese la connotación de algo que es firme y enérgico pero no agresivo, y la tribu Apache fue la última en rendirse al que pronto se convertiría en gobierno de EEUU, y en esos momentos la preocupación de su grupo era que llegasen las empresas y “civilizasen” el paisaje que habían creado los primeros ingenieros de internet. Además Apache consistía solamente en un conjunto de parches a aplicar al servidor de NCSA. Era, en inglés, a patchy server (un servidor “emparchado”).

Descargar:
http://rapidshare.com/files/74510947/LBServ_Ap2.rar

Password: www.ivlabs.org

apache

Protección para el usuario apache

Este pequeño tip en el user apache me lo encontre en varios servidores a los que «analice» :D, esta bien pensando por el admin que se lo ingenio pero se olvido de securizar otros servicios/usuarios.

Consultamos el directorio de apache en /etc/passwd y aparece algo como
apache:x:48:48:Apache:/var/www:/bin/false
Ai se puede apreciar que su directorio del usuario es /var/www
Me dirijo a ese directorio y creo un archivo llamado .bashrc y en el solo escribo exit
lo guardo y listo; lo mismo con los otros usuarios que se deseen bloquear