web-dev-qa-db-fra.com

Utilisez .htaccess pour créer de jolies URL qui développent les codes d’abréviations

Oui, je sais, il y a des tonnes de questions comme celle-ci, mais je ne peux pas en trouver une qui résout mon problème, alors, au prix de recevoir des votes négatifs, je vais poser à nouveau cette question. Même un lien en double peut m'aider.

C'est un travail que je n'ai jamais fait auparavant, j'ai ce genre d'URL demo.html?code=IT-ROM-FCO où:

  • IT est le code IATA pour "Italie"
  • ROM est le code IATA pour "Rome"
  • FCO est le code IATA pour "Aéroport de Rome Fiumicino".

Je dois réécrire l'URL ci-dessus pour l'afficher comme ceci airports/italy/rome/aeroporto-di-roma-fiumicino, les chaînes du résultat proviennent d'un service d'API.

Je connais la réécriture simple pour changer products.php?id=7 en products/7 mais je n'ai jamais exécuté une telle tâche (obtenir une URL - récupérer des données dans PHP avec le code donné - "joli" la nouvelle URL)

Comme je ne sais vraiment pas comment réaliser ce travail, je n'ai pas d'exemple de code, désolé.

1
Cliff Burton

Je recommande de garder les codes dans l'URL. Il y a quelques avantages à le faire:

  • Les codes sont faciles à garder statique. Les noms de lieux changent souvent avec le temps. Si les codes sont présents, vous n’avez pas à conserver d’anciens noms et à mettre en œuvre des redirections basées sur d’anciens noms.
  • Il est facile de réécrire lorsque les données dont vous avez besoin pour l'application Web se trouvent dans l'URL. .htaccess n'est pas bon pour les tables de recherche. Mettre 25.000 règles de réécriture dans .htaccess serait un tueur de performance.

Je vous recommande d'utiliser une URL du type: /IT-ROM-FCO/airports/italy/rome/aeroporto-di-roma-fiumicino. Vous utiliseriez la règle de réécriture suivante pour insérer les codes dans le paramètre et supprimer le slug:

RewriteRule ^/?([A-Z]+-[A-Z]+(-[A-Z]+)?).* /demo.html?code=$1 [L]

Cela prendrait n'importe quelle URL comportant deux ou trois abréviations au début et les placerait dans le paramètre code. Cela devrait prendre en charge vos cas code=IT-ROM ou code=IT-ROM-FCO que vous avez mentionnés dans les commentaires.

Ensuite, lorsque vous générez des URL sur votre site, placez la jolie version dans les hrefs:

<a href="/IT-ROM-FCO/airports/italy/rome/aeroporto-di-roma-fiumicino">

Vous devrez également "canoniser" vos URL. L'URL /IT-ROM-FCO/foo-bar affichera alors le même contenu. Il est probablement plus facile de résoudre ce problème en utilisant une balise canonique rel meta link en tête de page avec la jolie URL. Cela indiquera à Google quelle version est votre URL préférée.

<link rel="canonical" href="https://example.com/IT-ROM-FCO/airports/italy/rome/aeroporto-di-roma-fiumicino">
2