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