{"id":187,"date":"2008-04-04T22:43:09","date_gmt":"2008-04-04T20:43:09","guid":{"rendered":"http:\/\/www.gatellier.be\/blog\/bonnes-pratiques-status-503-maintenance\/"},"modified":"2009-04-22T10:53:52","modified_gmt":"2009-04-22T08:53:52","slug":"bonnes-pratiques-status-503-maintenance","status":"publish","type":"post","link":"https:\/\/gatellier.be\/blog\/bonnes-pratiques-status-503-maintenance\/","title":{"rendered":"Status 503 pour vos sites en maintenance"},"content":{"rendered":"<p>Lorsque vous faites des mises \u00e0 jour importantes sur votre site, il est judicieux de mettre celui-ci en mode &#8220;<strong>maintenance<\/strong>&#8220;.<\/p>\n<p>En effet, vos visiteurs peuvent \u00eatre perturb\u00e9s par les erreurs \u00e9ventuelles de design et de code. De m\u00eame, les moteurs de recherche peuvent indexer votre site pendant les op\u00e9rations de mise \u00e0 jour.<\/p>\n<p>Bref, imaginez les effets n\u00e9fastes d&#8217;une telle op\u00e9ration&#8230;<\/p>\n<h3>Les recommandations Google&nbsp;: le <strong>status 503<\/strong> (service non disponible)<\/h3>\n<p>De plus <a href=\"\/\/googlewebmastercentral.blogspot.com\/2006\/08\/all-about-googlebot.html\" hreflang=\"en\" title=\"Official Google Webmaster Central Blog: All About Googlebot\">Google recommande<\/a> de renvoyer une erreur 503:<\/p>\n<blockquote cite=\"\/\/googlewebmastercentral.blogspot.com\/2006\/08\/all-about-googlebot.html\" lang=\"en\">\n<dl>\n<dt>If my site is down for maintenance, how can I tell Googlebot to come back later rather than to index the &#8220;down for maintenance&#8221; page?<\/dt>\n<dd>You should configure your server to return a <strong>status of 503 (network unavailable)<\/strong> rather than 200 (successful). That lets Googlebot know to try the pages again later.<\/dd>\n<\/dl>\n<\/blockquote>\n<p>Ce qui se traduit en gros par&nbsp;:<\/p>\n<blockquote>\n<dl>\n<dt>Si mon site est en mode de maintenance, comment puis-je indiquer \u00e0 Google revenir plus tard au lieu d&#8217;indexer une page &#8220;Site en maintenance&#8221;?<\/dt>\n<dd>Vous devriez configurer votre serveur pour qu&#8217;il renvoie un <strong>status 503 (r\u00e9seau indisponible)<\/strong> plut\u00f4t qu&#8217;un status 200 (requ\u00eate satisfaite). Ceci fait comprendre \u00e0 Googlebot qu&#8217;il doit retester ces pages plus tard.<\/dd>\n<\/dl>\n<\/blockquote>\n<p>Maintenant qu&#8217;on sait ce qu&#8217;il faut faire, voici comment le faire&nbsp;:<\/p>\n<p><!--more--><\/p>\n<h3>Mode de Maintenance sur Apache via .htaccess avec php<\/h3>\n<p>Un fichier <strong><a href=\"\/\/httpd.apache.org\/docs\/1.3\/howto\/htaccess.html\" hreflang=\"en\">.htaccess<\/a><\/strong> permet de donner de configurer un serveur Apache \u00e0 un niveau pr\u00e9cis (d&#8217;un r\u00e9pertoire).<\/p>\n<p>Il faut \u00eatre assez attentif avant de modifier ces fichiers car une mauvaise manipulation peut rendre votre site inaccessible.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;IfModule mod_rewrite.c&gt;\r\nRewriteEngine On\r\nRewriteCond %{REMOTE_ADDR} !^192\\.168\\.10\\.100$\r\nRewriteRule !upgrade.php$ \/upgrade.php &#x5B;L]\r\n&lt;\/IfModule&gt;\r\n<\/pre>\n<p>Le principe est: on active l&#8217;engin de r\u00e9\u00e9criture, pour toutes les adresses qui viennent sur le site \u00e0 l&#8217;exception de celle de notre environnement de test, on redirige vers upgrade.php<\/p>\n<p>Ceci aura pour cons\u00e9quence de rediriger tous les visiteurs (\u00e0 l&#8217;exception des visiteurs ayant l&#8217;adresse ip 192.168.10.100) vers la page upgrade.php \u00e0 la racine de votre site.<\/p>\n<p>Tout en haut de ce fichier, vous pouvez ajouter les instructions suivantes&nbsp;:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n&lt;? header(&quot;HTTP\/1.1 503 Service Unavailable&quot;); ?&gt;\r\n<\/pre>\n<p>Ce fichier peut ensuite contenir du code html standard.<\/p>\n<h3>Mode de Maintenance sur Coldfusion via application.cfc<\/h3>\n<p>Sur les serveurs Coldfusion, on peut avoir un fichier <strong>application.cfc<\/strong> qui contient toutes les fonctions et variables de session et d&#8217;application.<\/p>\n<p>Il existe une fonction qui peut servir tout \u00e0 fait \u00e0 cette t\u00e2che: <strong><a href=\"\/\/livedocs.macromedia.com\/coldfusion\/7\/htmldocs\/00000700.htm\" lang=\"en\">onRequestStart<\/a><\/strong>.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;cffunction name=&quot;onRequestStart&quot;&gt;\r\n&lt;cfset maintenanceMode = true \/&gt;\r\n&lt;cfif maintenanceMode AND cgi.REMOTE_ADDR neq &quot;192.168.10.100&quot; &gt;\r\n\t&lt;cfinclude template=&quot;\/upgrade.cfm&quot; \/&gt;\r\n\t&lt;cfabort \/&gt;\r\n&lt;\/cfif&gt;\r\n&lt;\/cffunction&gt;\r\n<\/pre>\n<p>Le principe <a href=\"\/\/www.coldfusionjedi.com\/index.cfm\/2008\/3\/24\/Ask-a-Jedi-Question-on-Application-based-CFCs#cE7D2D683-19B9-E658-9DDBAB69ADDD3347\" hreflang=\"en\">ici<\/a>: pour chaque requ\u00eate de page, le serveur Coldfusion v\u00e9rifie si la variable <code>maintenanceMode<\/code> est vraie (et que l&#8217;adresse ip du visiteur n&#8217;est pas celle de notre environnement de test) dans ce cas, le serveur lira un fichier upgrade.cfm situ\u00e9 \u00e0 la racine du serveur.<\/p>\n<p>La premi\u00e8re instruction \u00e0 ins\u00e9rer dans la page est le status 503&nbsp;:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;cfheader statuscode=&quot;503&quot; statustext=&quot;Service Unavailable&quot;&gt;\r\n\r\n<\/pre>\n<p>Ce fichier peut ensuite contenir du code html standard.<\/p>\n<h3>Et pour IIS me direz-vous?<\/h3>\n<p>Je n&#8217;ai pas pu tester le mode de maintenance sur IIS5 ou IIS6 mais une piste \u00e0 suivre est <a href=\"\/\/www.velocityreviews.com\/forums\/showpost.php?s=112fe1f37438ba971b12f016eb07aa16&#038;p=487997&#038;postcount=3\" lang=\"en\">cette r\u00e9ponse sur un forum<\/a><\/p>\n<p>Surtout la partie global.asa, ou global.asax (en fonction du framework employ\u00e9).<\/p>\n<p>Dans ce cas-ci, on emploira dans le fichier \/upgrade.asp<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;% response.Status=&quot;503 Service Unavailable&quot; %&gt;\r\n<\/pre>\n<h3>Liens relatifs&nbsp;:<\/h3>\n<ul>\n<li><a href=\"\/\/googlewebmastercentral.blogspot.com\/2006\/08\/all-about-googlebot.html\" lang=\"en\">Recommandations Google<\/a><\/li>\n<li><a href=\"\/\/httpd.apache.org\/docs\/1.3\/howto\/htaccess.html\" hreflang=\"en\">Intro Apache sur le fichier .htaccess<\/a><\/li>\n<li><a href=\"\/\/www.proximusmoblog.be\/\">Proximus Moblog<\/a> &#8211; le dernier site o\u00f9 j&#8217;ai mis la m\u00e9thode application.cfc en pratique<\/li>\n<li><a href=\"\/\/en.wikipedia.org\/wiki\/List_of_HTTP_status_codes\" hreflang=\"en\">Liste des Status HTTP sur Wikipedia<\/a><\/li>\n<li><a href=\"\/\/sw-guide.de\/wordpress\/plugins\/maintenance-mode\/\" hreflang=\"en\">Un plugin pour vous faciliter les maintenances sur WordPress<\/a> &#8211; pas test\u00e9&nbsp;!<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Google recommande l&#8217;usage du status 503 lors de vos maintenances. Explications pour apache et .htaccess avec modrewrite, Coldfusion et application.cfc avec onRequestStart.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71,30,10],"tags":[75,77,177,76,78,74,72,80,73],"class_list":["post-187","post","type-post","status-publish","format-standard","hentry","category-bonnes-pratiques","category-code","category-tutorial","tag-htaccess","tag-applicationcfc","tag-bonnes-pratiques","tag-coldfusion","tag-iis","tag-maintenance","tag-mise-a-jour","tag-mise-en-production","tag-web-serveur"],"_links":{"self":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/posts\/187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/comments?post=187"}],"version-history":[{"count":0,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/posts\/187\/revisions"}],"wp:attachment":[{"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/media?parent=187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/categories?post=187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gatellier.be\/blog\/wp-json\/wp\/v2\/tags?post=187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}