Uso normalmente el servicio de hosting de 1and1.es, pero tiene un extraño problema: Los fallos de .htaccess. Quiero decir que si copias un web completo de otro servidor a un servidor de 1and1, y el rewrite del .htaccess estaba funcionamdo correctamente en el servidor anterior, el mismo .htaccess puede fallar en el servidor de 1and1. ¿Por qué? No lo se, pero si buscas en Google "1and1 .htaccess" encontrarás decenas de mensajes de gente reportando fallos. Este es el fallo que me ocurre a mi y la solución:
Tengo una subcarpeta, por ejemplo "http://www.server.com/subdir". En esta subcarpeta, tengo un .htaccess para la web que hay en esa subcarpeta. Tengo un fichero llamado "contacto.php" y quiero una URL del tipo "http://www.server.com/subdir/contacto/". Escribo en el .htaccess:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /subdir
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^contacto/$ contacto.php [NC,L,QSA]
Muy sencillo, pero me da error 404. Entonces pruebo a hacer rewrite a todo:
RewriteRule ^(.*)$ contacto.php [NC,L,QSA]
Y ahora viene lo bueno, si escribo "http://www.server.com/subdir/contacto/" me da un error 404, pero si escribo "http://www.server.com/subdir/foo/" (o lo que sea excepto "contacto"), ¡funciona correctamente!. Por lo tanto, el sistema no quiere que reescribas una URL cuyo fichero tenga el mismo nombre, ¿es extraño?. Como "^contacto/$ contacto.php" no funciona, renombro el fichero a "h_contacto.php" y finalmente el .htaccess será:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /subdir
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^contacto/$ h_contacto.php [NC,L,QSA]
y ahora al escribir la URL "http://www.server.com/subdir/contacto/" funciona bien. Rarezas de 1and1.