Normalmente cuando trabajamos con un servidor de aplicaciones Tomcat, jBOSS, etc tenemos por delante un servidor web Apache para todo lo relacionado con URL Rewriting/Reescritura de URL, funciones de Proxy, etc. ¿Qué pasa si queremos hacer el url-rewrite directamente en Tomcat sin un frontal web?
Tomcat por defecto no dispone de función de reescritura de URLs, es necesario instalar un filtro web Java llamado UrlRewriteFilter. Vamos a ver su instalación y configuración.
Descargamos el filtro:
# wget http://urlrewritefilter.googlecode.com/files/urlrewritefilter-4.0.3.jar
El filtro debe estar junto con el restro de .jar, en el caso de Debian lo movemos a la ruta donde están los jar de JAVA y hacemos un link simbólico en la ruta lib/ de tomcat. Si queréis lo podéis poner directamente en el lib/
# ls -l /usr/share/java/urlrewritefilter-4.0.3.jar -rw-r--r-- 1 root root 177497 jul 2 2012 /usr/share/java/urlrewritefilter-4.0.3.jar # ls -l /usr/share/tomcat7/lib/urlrewritefilter-4.0.3.jar lrwxrwxrwx 1 root root 37 ago 20 10:02 /usr/share/tomcat7/lib/urlrewritefilter-4.0.3.jar -> ../../java/urlrewritefilter-4.0.3.jar
Ahora ya podemos configurar la aplicación que queremos que disponga del filtro URL Rewrite. Hay que modificar el fichero web.xml y añadir el filtro:
<filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
Y por último creamos el fichero urlrewrite.xml en el mismo directorio que el web.xml y en él configuramos los filtros que estimemos oportunos. En este caso podéis ver un filtro para forzar el dominio con «www»:
<urlrewrite> <rule> <name>seo redirect</name> <condition name="host" operator="notequal">^www.test.com</condition> <condition name="host" operator="notequal">^localhost</condition> <from>^/(.*)</from> <to type="permanent-redirect" last="true">http://www.test.com/$1</to> </rule> </urlrewrite>
Otro ejemplo, redirección de una URL:
<urlrewrite> <rule> <from>^/url-antigua/foo/index\.html$</from> <to type="redirect">/url-nueva/bar//index.html</to> </rule> </urlrewrite>
Más ejemplos aquí.
Una vez configurado todo, se reinicia Tomcat y verifica el funcionamiento de los rewrites.