cómo hacer buenas URL reescritas desde un enrutador

Estoy haciendo un kit de herramientas para aplicaciones php. He creado un sistema de enrutamiento basado en algunas convenciones, funciona bien, pero me gustaría aprender cómo hacer reglas mod_rewrite o cualquier otra cosa para finalmente hacer que la url sea buena para ver y buena para SEO.

El sistema de ruta comienza desde un archivo de configuración que establece la aplicación y las raíces de URL.

$app_root = $_SERVER["DOCUMENT_ROOT"].dirname($_SERVER["PHP_SELF"])."/";
$app_url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/';
define("APP_URL",$app_url);
define("APP_ROOT",$app_root);

La ruta siempre comienza desde index.php, lo que hace que las instancias de controllers @ actions desde parámetros GET controllers =? & Action =?

Este es el index.php

    <?php
include_once 'controller/Frontend.php';
require 'libraries/Router.php';
$params=array();
    if(isset($_GET['controller'])&&isset($_GET['action'])){
        $c = $_GET['controller'];   
        $a = $_GET['action'];    
        // add all query string additional params to method signature i.e. &id=x&category=y
        $queryParams = array_keys($_GET);
        $queryValues = array_values($_GET);
            for ($i=2;$i<count($queryParams);$i++) {
                $params[$queryParams[$i]] = $queryValues[$i];   
            }

    if ($_POST) {
    // add all query string additional params to method signature i.e. &id=x&category=y
    $queryParams = array_keys($_POST);
    $queryValues = array_values($_POST);
            for ($i=0;$i<count($_POST);$i++) {
                $params[$queryParams[$i]] = $queryValues[$i];   
            }
            }
    include_once APP_ROOT."/controller/$c.php";
    $controller = new $c();
    $controller->$a($params);

    }  else {   
    //attiva controller predefinito    
    $controller = new Frontend();
    $controller->index();
    }

Esto permite seleccionar qué controlador y qué acción debe llamar el enrutador.

La función del enrutador aquí obtiene la URL de la aplicación desde settings.php en la raíz. Usted le da a los dos controladores @ parámetros de acción como una cadena y hace que la URL sea así: index.php? Controller = X & action = Y & [parámetros ...]

<?php

requiere './settings.php';

    function router($controller,$action,$query_data="") {
    $param = is_array($query_data) ? http_build_query($query_data) : "$query_data";
    $url = APP_URL."index.php?controller=$controller&action=$action&$param";
    return $url;
}
    function relativeRouter ($controller,$action,$query_data=""){
    $param = is_array($query_data) ? http_build_query($query_data) : "$query_data";
    $url = "index.php?controller=$controller&action=$action&$param";
    return $url;
}
    function redirectToOriginalUrl() {
        $url = $_SERVER['HTTP_REQUEST_URI'];
        header("location: $url");
    }

    function switchAction ($controller, $action) {
        $r = router($controller, $action);
        header("location:$r", true, 302);
    }

En el archivo de plantillas, llamo al enrutador ('controlador,' acción ') para recuperar las URL de las acciones y también pasar los datos GET / POST (recopilados de index.php que los coloca en la firma del método como matriz).

No me culpen por usar POST / GET global sin filtrar, todavía estoy desarrollando la cosa, las cosas de seguridad se harán después;)

Lo que me gustaría preguntar si alguien podría compartir algunas ideas sobre cómo hacer URL bonitas como sitio / página / acción ... Por ejemplo www.site.com/blog/post?id=1

(En realidad, los N parámetros en la función de enrutador ($ query_data) funcionan de esta manera, pasa la matriz ['id' => '1'] y obtiene? Id = 1)

¿Cuáles son las mejores estrategias para hacer buenas URL? Muchas gracias, todavía estoy aprendiendo PHP.

Si hay la mejor manera de hacer tales cosas, simplemente envíe sus comentarios.

Respuestas a la pregunta(1)

Su respuesta a la pregunta