Apache ofrece la posibilidad de usar un módulo llamado mod_rewrite que nos permite crear URLs Amigables mediante expresiones regulares.
Pero no todos los servidores ofrecen esta posibilidad. Teniendo en cuenta que en los Espacios web de Miarroba no se permiten los ficheros .htaccess, no podemos utilizar el mod_rewrite para hacer URLs Amigables.
En su lugar, Miarroba ha incorporado en todos sus espacios un método alternativo para ello: el fichero friendly_urls.php.
FRIENDLY_URLS.PHP
Al crear un fichero llamado friendly_urls.php en la raíz del espacio web, todas las peticiones que no sean ficheros reales pasarán por ese archivo.
Es decir, si el fichero al que se hace la petición no existe, la petición se realiza a friendly_urls.php.
¿CÓMO FUNCIONA?
Imaginemos que tenemos un blog con URLs de la forma:
https://blog.webcindario.com/article/?id=123456
Y queremos crear URLs Amigables de la forma:
https://blog.webcindario.com/article/123456-titulo-del-articulo.html
La petición a la primera ruta iría al fichero index.php de la carpeta article, recogería la variable mediante GET, y mostraría el artículo correspondiente. En el segundo caso (suponiendo que no existe esa ruta) pasaría por friendly_urls.php, donde deberíamos tener algo como esto:
<?php
// Recoger URI
$URI = $_SERVER["REQUEST_URI"];
// Expresión regular
$preg = "/\/article\/([0-9]+)([-a-z0-9]+)\.html/";
// Obtener Id
$id = preg_replace($preg, "$1", $URI);
// Incluir articulo (hay que modificar el archivo para no recoger el id mediante $_GET)
include("article/index.php");
?>
ERROR 404 PERSONALIZADO
Si creamos el fichero friendly_urls.php todas las peticiones a ficheros que no existan irán ahí, con lo cual la configuración del error 404 personalizado ya no tiene efecto. Tendremos que hacerlo nosotros.
Retomando el ejemplo anterior:
<?php
// Recoger URI
$URI = $_SERVER["REQUEST_URI"];
// Expresión regular
$preg = "/\/article\/([0-9]+)([-a-z0-9]+)\.html/";
// Comprobar si la URI cumple la expresión regular
if (preg_match($preg, $URI)) {
// Obtener Id
$id = preg_replace($preg, "$1", $URI);
// Incluir articulo
include("article/index.php");
} else {
// Cabecera de error 404
header("HTTP/1.0 404 Not Found");
// Incluir nuestro fichero de error personalizado
include("error404.php");
}
?>