Oui. Fondamentalement, vous voudrez passer l'URL entière à travers un script de routeur en utilisant mod_rewrite. Le fichier .htaccess devrait avoir quelque chose comme ceci:
RewriteEngine On
RewriteBase/
#if it's an existing directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
#...or an existing file
RewriteCond %{REQUEST_FILENAME} -f
#serve it up
RewriteRule ^(.+) - [PT,L]
#else, direct to index.php
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
Puis, en index.php vous pouvez avoir quelque chose comme ceci:
$request = explode('/', $_GET['url']);
qui aurait tous vos segments d'URL propre dans le tableau de demande de $ . Une fois que vous avez ces valeurs, vous pouvez vous connecter à la base de données, trouver ce que l'URL représente et sortir la page. Si ce n'est pas le cas, vous pouvez envoyer un en-tête 404 avec un message "Page non trouvée".
header('HTTP/1.0 404 Not Found');
echo '<p>Page not found</p>';
Voilà donc la technique de base de l'url propre. Si l'URL est la première, un désordre, vous suffit d'ajouter une logique pour vérifier que, et rediriger vers l'URL correcte propre:
if(isset($_GET['cat'])){
//put some logic here
header("Location: http://localhost/".$the_clean_url);
}
Cette technique de base devrait résoudre votre problème avec quelques bricolages.