sisè / segona

Soy Víctor Rodríguez, programador web freelance con más de 10 años de experiencia

Un poco de .htaccess y redirecciones

Hace un par de días me llegó está petición:

Administro una web sin CMS donde tenemos que añadir unas páginas a modo de Landings.
Cada página nueva es un archivo .PHP dentro de la carpeta /landings
Por SEO queremos que la URL visible sea /cat/nom-de-la-landing
Por orden interno de la página queremos intentar no haber de mover los archivos .php de las landings a la carpeta /cat/

¿Cómo lo ves? ¿Es posible hacerlo con PHP i htaccess?

Y aquí está el pequeño script .htaccess que hace falta para solucionar el problema:

Options -Indexes +FollowSymLinks
RewriteEngine On 
RewriteBase / 

RewriteRule ^cat/(.*) landings/$1.php [L]

Así tendremos que:

www.example.com/cat/nom-de-la-landing

irá a servir:

/landings/nom-de-la-landing.php

Hasta otra!

UPDATE 1: 27/03/2015 17:46

¿Qué pasa si queremos mostrar otras pàginas dentro de la carpeta /cat?

Pues que hay que añadir la siguiente directriz justo encima de la regla de redireccionamiento a la carpeta landings:

RewriteCond %{REQUEST_FILENAME} !-s

Lo que hace es servir la pàgina solicitada al servidor si existe en la ruta pedida.

Así nos quedará el siguiente fichero .htaccess final:

Options -Indexes +FollowSymLinks
RewriteEngine On 
RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^cat/(.*) landings/$1.php [L]

Ahora :P

UPDATE 2: 08/04/2015 15:16

¿Y si queremos añadir nuevos idiomas a las landings? Por ejemplo, para el español, añadir urls tales como /esp/nombre-de-la-landing

Pues modificamos la relga de la siguiente manera (Recordar que las reglas se configuran con expresiones reguleras regulares.)

Options -Indexes +FollowSymLinks
RewriteEngine On 
RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(cat|esp)/(.*) landings/$2.php [L]

Si además para ordenar un poco todo el tinglado de páginas landings las separamos por sus respectivos idiomas, podemos tener una estructura de carpetas tal que:

/landings/cat/nom-de-la-landing.php
/landings/esp/nombre-de-la-landing.php

Y la regla de la siguiente manera:

Options -Indexes +FollowSymLinks
RewriteEngine On 
RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(cat|esp)/(.*) landings/$1/$2.php [L]

:P