Mysql
 sql >> Base de données >  >> RDS >> Mysql

Réécrire l'URL, en remplaçant l'ID par le titre dans la chaîne de requête

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.