Jolies URL dans les frameworks PHP

Je sais que vous pouvez append des règles dans htaccess, mais je constate que les frameworks PHP ne le font pas et que vous avez toujours de jolies URL. Comment font-ils cela si le serveur n’a pas connaissance des règles d’URL?

J’ai regardé la classe du gestionnaire d’url de Yii mais je ne comprends pas comment cela se passe.

Cela se fait généralement en acheminant toutes les requêtes vers un seul point d’entrée (un fichier qui exécute un code différent en fonction de la demande) avec une règle telle que:

# Redirect everything that doesn't match a directory or file to index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* index.php [L] 

Ce fichier compare ensuite la requête ( $_SERVER["REQUEST_URI"] ) à une liste de routes – un mappage d’un motif correspondant à la requête à une action de contrôleur (dans les applications MVC) ou à un autre chemin d’exécution. Les frameworks incluent souvent un itinéraire qui peut déduire le contrôleur et l’action de la requête elle-même, en tant que route de sauvegarde.

Un petit exemple simplifié:

  'Home', '/about' => 'About' ); // Match the request to a route (find the first matching URL in routes) $request = '/' . sortingm($_SERVER['REQUEST_URI'], '/'); $route = null; foreach ($routes as $pattern => $class) { if ($pattern == $request) { $route = $class; break; } } // If no route matched, or class for route not found (404) if (is_null($route) || !class_exists($route)) { header('HTTP/1.1 404 Not Found'); echo 'Page not found'; exit(1); } // If method not found in action class, send a 405 (eg Home::POST()) if (!method_exists($route, $_SERVER["REQUEST_METHOD"])) { header('HTTP/1.1 405 Method not allowed'); echo 'Method not allowed'; exit(1); } // Otherwise, return the result of the action $action = new $route; $result = call_user_func(array($action, $_SERVER["REQUEST_METHOD"])); echo $result; 

Combiné à la première configuration, il s’agit d’un script simple qui vous permettra d’utiliser des URL telles que domain.com/about . J’espère que cela vous aidera à comprendre ce qui se passe ici.