{"id":68,"date":"2008-02-11T11:21:26","date_gmt":"2008-02-11T10:21:26","guid":{"rendered":"http:\/\/loicmathieu.free.fr\/wordpress\/?p=68"},"modified":"2012-11-08T19:51:38","modified_gmt":"2012-11-08T17:51:38","slug":"friendly-url","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/friendly-url\/","title":{"rendered":"Friendly URL"},"content":{"rendered":"<p>Dans cet article, je vais vous parler des Friendly URL et vous donner un exemple d&rsquo;impl\u00e9mentation en Java\/J2EE. D&rsquo;autres technologie permettent facilement de mettre en place ce type de fonctionnalit\u00e9.<\/p>\n<p>On peut parler de user-friendly ou de search-engine-friendly URL. Pour ma part, une bonne Friendly URL est pour les deux!<\/p>\n<h3>Pourquoi des Friendly URL?<\/h3>\n<p>Les Friendly URLs apportent les propri\u00e9t\u00e9s suivantes \u00e0 vos URLs:<\/p>\n<ul><li>Masquer la technologie utilis\u00e9 par votre application : c&rsquo;est tr\u00e8s important pour des raisons de s\u00e9curit\u00e9 et vous permet facilement de migrer vers une autres technologie si n\u00e9cessaire en abstrayant vos sch\u00e9ma d&rsquo;URL de la technologie utilis\u00e9e.<\/li>\n\n<li>Avoir des URL plus compr\u00e9hensible par un moteur de recherche, en utilisant des mots cl\u00e9s traduit dans les diff\u00e9rents langues de votre sites, ce qui permet un meilleur r\u00e9f\u00e9rencement.<\/li>\n\n<li>Avoit des URLs plus <em>jolie<\/em> pour l&rsquo;utilisateur. Les friendly URLs peuvent \u00eatres facilement communiqu\u00e9e \u00e0 l&rsquo;utilisateur parce qu&rsquo;elle sont moins technique et plus compr\u00e9hensible.<\/li>\n\n<li>Mettre du sens dans les URL : les URLs ont maintenant du sens en elle-m\u00eame, par l&rsquo;utilisation de mots cl\u00e9s traduites dans toutes les langues de votre site, les URLs vont avoir du sens pour vos utilisateurs qui vont pouvoir directement comprendre \u00e0 propos de quoi est votre page juste en regardant son URL. C&rsquo;est tr\u00e8s important quand vous voulez communiquer des URLs \u00e0 vos utilisateurs (par exemple pour une campagne de promotion).<\/li>\n<\/ul>\n<h3>Anatomie d&rsquo;une Friendly URL<\/h3>\n<!--more-->\n<p>Voici ce ce \u00e0 quoi peut ressemble une bonne vielle URL technique :<a class=\"external free\" title=\"http:\/\/www.belgacom.be\/private\/en\/jsp\/dynamic\/standardpage.jsp?dcrName=my_page\" rel=\"nofollow\" href=\"http:\/\/www.belgacom.be\/private\/en\/jsp\/dynamic\/standardpage.jsp?dcrName=my_page\">\n<\/a>\n<span class=\"external free\"> <a href=\"http:\/\/www.domain.fr\/site\/fr\/page.do?id=my_page\">http:\/\/www.domain.fr\/site\/fr\/page.do?id=my_page<\/a><\/span>\n<a class=\"external free\" title=\"http:\/\/www.belgacom.be\/private\/en\/jsp\/dynamic\/homepage.jsp\" rel=\"nofollow\" href=\"http:\/\/www.belgacom.be\/private\/en\/jsp\/dynamic\/homepage.jsp\"><\/a><\/p>\n<p>J&rsquo;app\u00e8lerais ces URLs, des URls technique. Vous pouvez vouloir les conserver en m\u00eame temps que les friendly URL pour des raisons de compatibilit\u00e9 ou pour des raisons de maintenances.<\/p>\n<p>Si nous faisont son autopsie, nous avons ce qui suit:\n\/\/\/?id=<\/p>\n<p>La solution de Friendly URL que je pr\u00e9sente dans cet article est la suivante :\n<a href=\"http:\/\/www.domain.fr\/site\/1\/my_page\/en\/Le-Titre-de-ma-page.html\">http:\/\/www.domain.fr\/site\/1\/my_page\/en\/Le-Titre-de-ma-page.html<\/a>\n\/\/\/\/\/.html<\/p>\n<p>Si vous regardez de plus pr\u00eat ce qui a \u00e9t\u00e9 propos\u00e9, vous verrais les fonctionnalit\u00e9s suivantes pour une Friendly URL :<\/p>\n<ul><li>Les Friendly URLs contiennent les informations suivantes: type de page, langage, identifiant<\/li>\n\n<li>La fin de la Friendly URL est le titre de la page vers laquelle l&rsquo;URL pointe traduite dans le langage en court. Cette fin d&rsquo;URL n&rsquo;est pas utilis\u00e9 dans notre m\u00e9canisme donc n&rsquo;as aucune raison d&rsquo;exister du point de vue technique. Elle finie par<em>.html<\/em> car elle lie vers une page HTML.<\/li>\n<\/ul>\n<h3>Comment l&rsquo;impl\u00e9menter<\/h3>\n<h4>Redirection<\/h4>\n<p>La premi\u00e8re partie et la plus importante est la redirection. En effet, vos Friendly URL doivent rediriger vers le nom interne de la page (son action Struts ou son controlleur Spring MVC par exemple). La premi\u00e8re chose \u00e0 faire est de d\u00e9finir une politique de redirection des Friendly URL vers les URL interne.<\/p>\n<p>Je propose ici, d&rsquo;utiliser un filtre d&rsquo;URL rewriting, l&rsquo;UrlRewriteFilter dont vous pouvez trouver les informations ici: <a href=\"http:\/\/tuckey.org\/urlrewrite\/\"><a href=\"http:\/\/tuckey.org\/urlrewrite\/\">http:\/\/tuckey.org\/urlrewrite\/<\/a><\/a>.  C&rsquo;est un filtre J2EE qui se configure en utilisant des regex du style pearl (il est en faite baser sur le mod_rewrite d&rsquo;apache).En voici un exemple simple de configuration:<\/p>\n<pre>\n    \n        ^\/1\/([^\/]+)\/([^\/]+)\/(.*).html(.*)$\n        $1\n        \/contentPage.do\n    \n    \n        ^\/2\/([^\/]+)\/([^\/]+)\/(.*).html(.*)$\n        $1\n        \/categoryPage.do\n    \n<\/pre>\n<p>On a ici d\u00e9finie deux r\u00e8gles de redirection :<\/p>\n<ul><li>Une page de type 1 qui redirige vers l&rsquo;URL interne contentPage.do<\/li>\n\n<li>Une page de type 2 qui redirige vers l&rsquo;URL interne categoryPage.do<\/li>\n<\/ul>\n<p>Bien sure, ceci n&rsquo;est qu&rsquo;un exemple qui doit \u00eatre modifier pour tenir compte de votre propre politique d&rsquo;utilisation d&rsquo;URL.<\/p>\n<h4>G\u00e9n\u00e9ration depuis votre admin<\/h4>\n<p>Si vous avez une administration pour votre site, n&rsquo;oubliez pas de le mettre \u00e0 jour pour qu&rsquo;il g\u00e9n\u00e8re \u00e0 pr\u00e9sent vos URLs comme des Friendly URLs.<\/p>\n<h4>G\u00e9n\u00e9ration depuis le site<\/h4>\n<p>De la m\u00eame mani\u00e8re, votre site doit utiliser vos Friendly URL pour lier ses pages les unes entre les autres. La cr\u00e9ation d&rsquo;une taglib pour g\u00e9n\u00e9rer vos Friendly URL peut s&rsquo;av\u00e9rer profitable.<\/p>","protected":false},"excerpt":{"rendered":"<p>Dans cet article, je vais vous parler des Friendly URL et vous donner un exemple d&rsquo;impl\u00e9mentation en Java\/J2EE. D&rsquo;autres technologie permettent facilement de mettre en place ce type de fonctionnalit\u00e9. On peut parler de user-friendly ou de search-engine-friendly URL. Pour ma part, une bonne Friendly URL est pour les deux! Pourquoi des Friendly URL? Les Friendly URLs apportent les propri\u00e9t\u00e9s suivantes \u00e0 vos URLs: Masquer la technologie utilis\u00e9 par votre application : c&rsquo;est tr\u00e8s important pour des raisons de s\u00e9curit\u00e9&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/friendly-url\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[151,11,14],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-informatique","tag-java","tag-web"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":39,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/sitemesh-gerer-son-layout-sans-douleur\/","url_meta":{"origin":68,"position":0},"title":"Sitemesh : g\u00e9rer son layout sans douleur","author":"admin","date":"vendredi  6 juillet 2007","format":false,"excerpt":"Sitemesh permet de g\u00e9rer facilement le layout des application web JAVA. Une petite description de comment il marche.","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1258,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/profiler-une-application-java-dans-un-conteneur-deploye-dans-kubernetes-avec-jfr-java-flight-recorder\/","url_meta":{"origin":68,"position":1},"title":"Profiler une application Java dans un conteneur d\u00e9ploy\u00e9 dans kubernetes avec JFR &#8211; Java Flight Recorder","author":"admin","date":"lundi 12 avril 2021","format":false,"excerpt":"La plupart des clients chez lesquels j'interviens aujourd'hui utilisent Kubernetes pour d\u00e9ployer leurs applications. Bien que Kubernetes soit un super outil, si on a besoin de ce type d'outil (qui est une discussion dans laquelle je ne rentrerais pas ici), il peut apporter une certaine complexit\u00e9 quant aux moyens de\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":19,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/ruby-on-rails\/","url_meta":{"origin":68,"position":2},"title":"Ruby on Rails","author":"admin","date":"jeudi 15 f\u00e9vrier 2007","format":false,"excerpt":"Bonjour, d'habitude au ton bucolique des vacances ou revendicatif des coups de gueules, aujourd'hui le ton de ce post va \u00eatre technophile. En effet, je bosse dans l'informatique qui est donc un de mes centre d'int\u00e9r\u00eat, et je vous livre ici mon premier message sur les nouvelles technologies. J'ai tester\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":92,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/rest-architecture-orientee-ressource\/","url_meta":{"origin":68,"position":3},"title":"REST &#8211; Architecture Orient\u00e9e Ressource","author":"admin","date":"mercredi 25 mars 2009","format":false,"excerpt":"Au menu aujourd'hui, un sujet tr\u00e8s tendance: REST. Abord\u00e9\u00a0 par le biais de l'Architecture Orient\u00e9 Ressource (ou ROA: Resource Oriented Architecture), autrement dit, comment cr\u00e9er une architecture de service bas\u00e9 sur REST. D\u00e9finitions Comme toujours, commen\u00e7ons par quelques d\u00e9finitions. Je vais les faire assez th\u00e9orique sinon apr\u00e8s, il ne me\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":669,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/ansible-introduction-et-mini-tuto\/","url_meta":{"origin":68,"position":4},"title":"Ansible : introduction et mini-tuto","author":"admin","date":"vendredi 24 f\u00e9vrier 2017","format":false,"excerpt":"J'ai r\u00e9cement fait un peu de veille sur Ansible, un outils d'automatisation de t\u00e2che, dans la mouvance devops. Pour l'occasion, j'ai pour la premi\u00e8re fois test\u00e9 (et approuv\u00e9!) slides.com\u00a0un site de cr\u00e9ation de pr\u00e9sentation permettant de facilement cr\u00e9er ses slides et de r\u00e9aliser la pr\u00e9sentation (avec un mode pr\u00e9sentateur, un\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":65,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/type-safe-enumeration\/","url_meta":{"origin":68,"position":5},"title":"Type-safe enum\u00e9ration","author":"admin","date":"mercredi  2 janvier 2008","format":false,"excerpt":"Aujourd'hui, je vais vous parler du design pattern Type-safe \u00e9num\u00e9ration et de son impl\u00e9mentation en Java 1.4. Ceux qui travaillent en Java5 connaissent bien et utilisent (enfin, je l'esp\u00e8re pour eux) les \u00e9num\u00e9rations, et bien, avec un peu plus d'effort, ce design pattern est impl\u00e9mentable aussi en Java 1.4, je\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/68\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}