Bien sûr, c'est possible, pour un script PHP, votre .htaccess pourrait ressembler à ceci :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
Cela réécrira toutes les URL à l'exception des noms de répertoire ou de fichier en "index.php?url=THE-TYPED-ADDRESS".
Dans votre index.php, vous pouvez alors utiliser la valeur de $_GET['url'] pour déterminer l'ID :
// init DB layer
if (isset($_GET['url']) && !empty($_GET['url'])) {
$url = my_filter_function($_GET['url']); // filter input
$pdo = my_get_pdo_function(); // get configured PDO objected
$query = "SELECT id FROM my_router_table WHERE url = ? LIMIT 1"; // use prepared statements for security/performance reasons
$stmt = $pdo->prepare($query);
$stmt->bindValue(1, $url, PDO::PARAM_STR); // bind the value as a string
// ternary operator expanded for readability
if ($stmt->execute()) {
$id = $stmt->fetch(PDO::FETCH_ASSOC);
} else {
$id = -1; // 404 page
}
// fetch content/render page according to ID
}
Il s'agit évidemment d'un exemple trop simplifié et vous devez vraiment vous assurer que vous échappez correctement votre entrée et utilisez des instructions préparées pour éviter les risques de sécurité. De plus, si vous utilisez MySQLi ou une autre couche d'accès à la base de données, votre code de préparation/exécution/récupération variera légèrement.