<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Grummfy&#039;s project &#187; apache</title>
	<atom:link href="http://grummfy.be/blog/key/apache/feed" rel="self" type="application/rss+xml" />
	<link>http://grummfy.be/blog</link>
	<description>Mes projets, mes rêves, mes envies, ...</description>
	<lastBuildDate>Mon, 02 Jan 2012 00:03:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Réécriture d’URL, alias et plusieurs développeurs sur Apache</title>
		<link>http://grummfy.be/blog/321#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/321#comments</comments>
		<pubDate>Thu, 12 Aug 2010 21:07:55 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[url rewriting]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=321</guid>
		<description><![CDATA[Une solution à la problématique des réécritures d'url sans rewriteBase tout en étant utilisable par plusieurs développeurs]]></description>
			<content:encoded><![CDATA[<p>Lorsque l&#8217;on travaille à plusieurs sur un projet, c&#8217;est toujours intéressant. Malheureusement, cela peut aussi entrainer divers problèmes. Je vais tenter de vous expliquer un ﻿﻿obstacle qui peut vite devenir très chi*nt&#8230;</p>
<p>Pour présenter cette problématique, je vais prendre exemple sur ce que je développe actuellement. Le site en cours de création se base sur zend framework et nécessite une réécriture d&#8217;URL. Il faut savoir qu&#8217;Apache utilise le chemin physique<sup class='footnote'><a href='#fn-321-1' id='fnref-321-1'>1</a></sup> comme base pour calculer le chemin vers le fichier réécrit sauf si on lui précise une directive RewriteBase différente. Le problème survient à cet endroit, plusieurs développeurs entrainent plusieurs machines et donc plusieurs configurations différentes!</p>
<p>La solution de base est que chaque personne utilisant un alias Apache définit un RewriteBase. Cependant, cela veut dire qu’a chaque nouvelle version du fichier .htaccess il faut redéfinir celui-ci.</p>
<p>La réponse la plus simple consiste à utiliser un RewriteCond sur l&#8217;hostname du serveur et bien entendu à l&#8217;utiliser lors de l&#8217;accès aux tests locaux ou non &#8230;</p>
<p>Exemple de configuration :</p>
<ul>
<li> nom du serveur : grummfy</li>
<li>URL appelée : http://grummfy/serveur/dev/projet/example.com/&#8230; (Si vous utilise http://localhost/ la directive HTTP_HOST vaudra localhost)</li>
<li>ALIAS : /serveur/ =&gt; /media/data/serveur/</li>
</ul>
<p>Le fichier .htacccess contiendra ceci :<br />
<code>SetEnv APPLICATION_ENV development<br />
php_value session.auto_start 0<br />
php_flag magic_quotes_gpc off<br />
RewriteEngine On<br />
RewriteCond %{REQUEST_FILENAME} -s [OR]<br />
RewriteCond %{REQUEST_FILENAME} -l [OR]<br />
RewriteCond %{REQUEST_FILENAME} -d<br />
RewriteRule ^.*$ - [NC,L]<br />
RewriteCond %{HTTP_HOST} grummfy<br />
RewriteRule ^.*$ /serveur/dev/projet/example.com/index.php [NC,L]<br />
RewriteRule ^.*$ index.php [NC,L]</code></p>
<p>Le fait d&#8217;utiliser le rewrite flag &laquo;&nbsp;L&nbsp;&raquo; permet de sortir de la réécriture d&#8217;URL. Si le hostname du serveur n&#8217;est pas grummfy il appliquera la règle par défaut, à savoir tenter de trouver index.php dans /media/data/serveur/dev/projet/example.com/ comme si on avait effectuer un appel depuis http://media/data/serveur/dev/projet/example.com/</p>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-321-1'>physical-directory-path <span class='footnotereverse'><a href='#fnref-321-1'>&#8617;</a></span></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/321/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Réécriture d&#8217;url et erreur interne à Apache</title>
		<link>http://grummfy.be/blog/289#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/289#comments</comments>
		<pubDate>Fri, 04 Jun 2010 13:15:29 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[deboguage]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[url rewriting]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=289</guid>
		<description><![CDATA[Il arrive que lors de l'écriture d'un nombre complexe de règle de réécriture d'URL, des erreurs se produisent. Passons au débogage de celles-ci.]]></description>
			<content:encoded><![CDATA[<p>Il arrive que lors de l&#8217;écriture d&#8217;un nombre complexe de règle de réécriture d&#8217;URL (URL rewriting), des erreurs se produisent sans pour autant être compréhensibles. Je vous propose donc de regarder comment déboguer cela à travers un exemple pratique.</p>
<h2>Exemple</h2>
<p>Prenons une règles qui vérifierait que seul certains type de caractère sont autorisés.<br />
La réécriture quant à elle se fait sur toute URL.<br />
Ajoutons un document 403 personnalisé<br />
<code>RewriteEngine on<br />
#<br />
RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/ [NC]<br />
RewriteRule .* - [F,NS,L]<br />
#<br />
#if not a dir or a file<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
#<br />
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]<br />
ErrorDocument 403 /erreur/403<br />
</code><br />
Testons l&#8217;URL http://localhost/test:s et on obtient un beau :</p>
<blockquote><p>Forbidden</p>
<p>You don&#8217;t have permission to access /test:s on this server.</p>
<p>Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.</p></blockquote>
<p>Les logs d&#8217;erreurs d&#8217;Apache vous diront certainement quelque chose du genre :</p>
<blockquote><p>[error] [client 127.0.0.1] Request exceeded the limit of 10 internal  redirects due to probable configuration error. Use  &#8216;LimitInternalRecursion&#8217; to increase the limit if necessary. Use  &#8216;LogLevel debug&#8217; to get a backtrace.</p></blockquote>
<h2>Passage en mode debug de Apache</h2>
<p>Modifions la règle de log du site courant (soit dans /etc/apache2/sites-available/default soit dans /etc/apache2/apache.conf ou l&#8217;équivalent suivant votre configuration ou OS) et modifions la directive <em>&laquo;&nbsp;LogLevel warn&nbsp;&raquo;</em> en <em>&laquo;&nbsp;LogLevel debug&nbsp;&raquo;</em>. Ceci ne change rien dans notre cas, mais parfois cela s&#8217;avère utile&#8230;</p>
<p>Ajoutons ensuite les log<sup class='footnote'><a href='#fn-289-1' id='fnref-289-1'>1</a></sup> de réécriture d&#8217;url (moi je l&#8217;ai ajouter dans /etc/apache2/mods-available/rewrite.conf puis j&#8217;ai fait un a2enmod rewrite (car le fichier .conf n&#8217;existait pas) et enfin j&#8217;ai relancer Apache) :<br />
<code>&lt;IfModule mod_rewrite.c&gt;<br />
RewriteLog "/var/log/apache2/rewrite.log"<br />
RewriteLogLevel 9<br />
&lt;/IfModule&gt;</code></p>
<p>Maintenant si vous aller voir dans error.log vous aurez :</p>
<blockquote><p>[error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use &#8216;LimitInternalRecursion&#8217; to increase the limit if necessary. Use &#8216;LogLevel debug&#8217; to get a backtrace.<br />
[debug] core.c(3063): [client 127.0.0.1] r-&gt;uri = /&#8230;/erreur/403<br />
[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = /&#8230;/erreur/403<br />
[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = /&#8230;/erreur/403<br />
[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = /&#8230;/erreur/403<br />
[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = /&#8230;/erreur/403<br />
[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = /&#8230;/erreur/403<br />
[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = /&#8230;/erreur/403<br />
[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = /&#8230;/erreur/403<br />
[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = /&#8230;/erreur/403<br />
[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = /&#8230;/erreur/403<br />
[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = /&#8230;/test:s</p></blockquote>
<p>Donc on voit que la redirection s&#8217;effectue correctement mais qu&#8217;il &laquo;&nbsp;<em>n&#8217;accroche</em>&nbsp;&raquo; pas. Regardons donc les logs de la réécriture d&#8217;URL (rewrite.log) :</p>
<blockquote><p>/initial] (3) [perdir /.../] strip per-dir prefix: /&#8230;/test:s -&gt; test:s<br />
/initial] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;test:s&#8217;<br />
/initial] (4) [perdir /.../] RewriteCond: input=&nbsp;&raquo; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial] (3) [perdir /.../] strip per-dir prefix: /&#8230;/test:s -&gt; test:s<br />
/initial] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;test:s&#8217;<br />
/initial] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/test:s<br />
/initial/redir#1] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#1] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#1] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#1] (4) [perdir /.../] RewriteCond: input=&#8217;403&#8242; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial/redir#1] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#1] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#1] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#1] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial/redir#1] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/erreur<br />
/initial/redir#2] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#2] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#2] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#2] (4) [perdir /.../] RewriteCond: input=&#8217;403&#8242; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial/redir#2] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#2] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#2] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#2] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial/redir#2] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/erreur<br />
/initial/redir#3] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#3] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#3] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#3] (4) [perdir /.../] RewriteCond: input=&#8217;403&#8242; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial/redir#3] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#3] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#3] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#3] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial/redir#3] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/erreur<br />
/initial/redir#4] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#4] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#4] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#4] (4) [perdir /.../] RewriteCond: input=&#8217;403&#8242; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial/redir#4] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#4] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#4] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#4] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial/redir#4] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/erreur<br />
/initial/redir#5] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#5] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#5] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#5] (4) [perdir /.../] RewriteCond: input=&#8217;403&#8242; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial/redir#5] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#5] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#5] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#5] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial/redir#5] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/erreur<br />
/initial/redir#6] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#6] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#6] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#6] (4) [perdir /.../] RewriteCond: input=&#8217;403&#8242; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial/redir#6] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#6] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#6] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#6] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial/redir#6] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/erreur<br />
/initial/redir#7] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#7] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#7] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#7] (4) [perdir /.../] RewriteCond: input=&#8217;403&#8242; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial/redir#7] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#7] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#7] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#7] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial/redir#7] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/erreur<br />
/initial/redir#8] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#8] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#8] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#8] (4) [perdir /.../] RewriteCond: input=&#8217;403&#8242; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial/redir#8] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#8] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#8] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#8] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial/redir#8] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/erreur<br />
/initial/redir#9] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#9] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#9] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#9] (4) [perdir /.../] RewriteCond: input=&#8217;403&#8242; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial/redir#9] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#9] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#9] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#9] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial/redir#9] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/erreur<br />
/initial/redir#10] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#10] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#10] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#10] (4) [perdir /.../] RewriteCond: input=&#8217;403&#8242; pattern=&#8217;200&#8242; =&gt; not-matched<br />
/initial/redir#10] (3) [perdir /.../] add path info postfix: /&#8230;/erreur -&gt; /&#8230;/erreur/403<br />
/initial/redir#10] (3) [perdir /.../] strip per-dir prefix: /&#8230;/erreur/403 -&gt; erreur/403<br />
/initial/redir#10] (3) [perdir /.../] applying pattern &#8216;.*&#8217; to uri &#8216;erreur/403&#8242;<br />
/initial/redir#10] (4) [perdir /.../] RewriteCond: input=&#8217;GET /&#8230;/test:s HTTP/1.1&#8242; pattern=&#8217;!^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/&#8217; [NC] =&gt; matched<br />
/initial/redir#10] (2) [perdir /.../] forcing responsecode 403 for /&#8230;/erreur</p></blockquote>
<p>En gros, nous avions une boucle de redirection. Pour l&#8217;éviter ajoutons,d ans le .htaccess, une condition qui dira de ne pas rentrer dans le bloc, s&#8217;il y a une erreur 403 :<br />
<code>RewriteEngine on<br />
#<br />
RewriteCond %{ENV:REDIRECT_STATUS} !403<br />
RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;]+\ HTTP/ [NC]<br />
RewriteRule .* - [F,NS,L]<br />
#<br />
#if not a dir or a file<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
#<br />
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]<br />
ErrorDocument 403 /erreur/403<br />
</code><br />
Maintenant tout fonctionne comme prévu!</p>
<h2>La fin</h2>
<p>Pour finir, ceci montre encore l&#8217;importance des logs lors de la rencontre de problème. S&#8217;il y a moyen penser a les activer, cela simplifie franchement la tâche de débogage que cela soit pour Apache mais aussi pour tout projet informatique.</p>
<p>Un dernier conseil, pensez a désactiver le mode debug de Apache une fois fini!</p>
<p>S&#8217;il y avait un site a conseiller sur ce sujet (en dehors du manuel Apache) je vous renverrait vers <a href="http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html" target="_blank">askapache</a></p>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-289-1'>Si le fichier ne se créer pas tout seul penser à le créer <span class='footnotereverse'><a href='#fnref-289-1'>&#8617;</a></span></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/289/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>URL rewriting et SEO : duplication de contenu</title>
		<link>http://grummfy.be/blog/268#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/268#comments</comments>
		<pubDate>Wed, 02 Jun 2010 20:09:53 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[référencement]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[url rewriting]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=268</guid>
		<description><![CDATA[Article présentant l'URL rewriting et ce qu'est SEO pour arriver à la problématique de la réécriture d'URL : la duplication de contenu et comment l'éviter.]]></description>
			<content:encoded><![CDATA[<p>Cet article présente rapidement l&#8217;<acronym title="Uniform Resource Locators">URL</acronym> rewriting et ce qu&#8217;est SEO pour arriver au cœur du sujet, à savoir, la problématique de la réécriture d&#8217;URL : la duplication de contenu. Pourquoi la duplication de contenu est gênante et surtout comment l&#8217;éviter sont expliqué dans la suite!<span id="more-268"></span></p>
<h2>Mise en bouche</h2>
<p>L&#8217;URL rewriting ou réécriture d&#8217;<acronym title="Uniform Resource Locators">URL</acronym><sup class='footnote'><a href='#fn-268-1' id='fnref-268-1'>1</a></sup> permet de réécrire de manière plus ou moins dynamique des URL (par exemple transformer http://www.example.com/ en http://example.com/ avec une redirection ou encore http://example.com/contact/moi/par/formulaire en http://example.com/contact.php).</p>
<p>SEO ou Search Engine Optimization consiste à optimiser le référencement d&#8217;un site.</p>
<h2>Exemple</h2>
<p>Afin de débuter, il convient de donner un exemple fonctionnel. Reprenons donc un fichier .htaccess de base :<code><br />
&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine on<br />
#si votre fichier se trouve dans /chemin vers votre répertoire de base de votre serveur/test/<br />
RewriteBase /test/<br />
#<br />
#On élimine les fichiers et répertoires qui existent déjà de la réécriture<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
#réécrit l'url<br />
RewriteRule ^(.+)$ index.php?path=$1 [QSA,L]<br />
&lt;/IfModule&gt;<br />
</code><br />
Je suppose que vous tester votre script localement, que vous êtes dans le dossier test et que le fichier php est index.php (qui suit).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">#
</span><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;pre&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SCRIPT_FILENAME'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REDIRECT_QUERY_STRING'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REDIRECT_URL'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REQUEST_URI'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SCRIPT_NAME'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PHP_SELF'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'QUERY_STRING'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/ pre&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">#
</span><span style="color: #666666; font-style: italic;"># EOF</span></pre></div></div>

<p>Si vous testez le script, essayez d&#8217;y accéder par http://localhost/test/ceci-est_un-test?toto=tata puis par http://127.0.0.1/ceci-est_un-test?toto=tata . Dans le deuxième cas, une redirection 301 (fichier bouger de manière permanente) est effectuée. Concernant, l&#8217;explication en détail de la réécriture d&#8217;URL je vous renvoi vers votre moteur de recherche favoris.</p>
<h2>Double accès</h2>
<p>Maintenant, un  problème se pose. En effet, votre site est accessible par plusieurs URL différentes pour un même contenu, les moteurs de recherche interpréteront cela comme du duplicata de contenu <sup class='footnote'><a href='#fn-268-2' id='fnref-268-2'>2</a></sup>! Pour résoudre ce problème, il faut simplement faire en sorte que seule une seule et unique adresse soit accessible.</p>
<p>Premièrement, vérifier que l&#8217;on provient du bon domaine (par exemple : n&#8217;autoriser que example.com et non pas www.example.com ou uniquement localhost et non pas 127.0.0.1), le fichier .htaccess devient :<br />
<code><br />
&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine on<br />
#si votre fichier se trouve dans /chemin vers votre répertoire de base de votre serveur/test/<br />
RewriteBase /test/<br />
#<br />
#test si on est bien sur le domaine localhost et non 127.0.0.1 ou autre chose<br />
RewriteCond %{HTTP_HOST} !^localhost<br />
#QSA pour transmettre le query string<br />
#L pour dire de sortir de la boucle de réécriture<br />
#R pour rediriger avec le code HTTP 301<br />
RewriteRule ^(.*) http://localhost/test/$1 [QSA,L,R=301]<br />
#<br />
#On élimine les fichiers et répertoires qui existent déjà de la réécriture<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
#réécrit l'url<br />
RewriteRule ^(.+)$ index.php?path=$1 [QSA,L]<br />
&lt;/IfModule&gt;<br />
</code></p>
<p>Ensuite, il faut dire aux moteurs de recherche de ne pas indexer les URL du genre index.php?mesparametres. Pour cela, on créé ou modifie le fichier robots.txt<sup class='footnote'><a href='#fn-268-3' id='fnref-268-3'>3</a></sup> :<br />
<code>User-agent: *<br />
Disallow: /test/index.php<br />
Allow: /test/</code></p>
<p>Maintenant, si vous testez le script, que cela soit par  http://localhost/test/ceci-est_un-test?toto=tata ou par  http://127.0.0.1/ceci-est_un-test?toto=tata seul localhost est accessible, l&#8217;autre effectue une redirection HTTP 301.</p>
<h2>Le mot de la fin</h2>
<p>Dans le cadre de la réécriture d&#8217;URL, il faut se méfier des possibilités d&#8217;inversion de paramètre. En effet, avec <a href="http://grummfy.be/blog/zend-framework">ZF</a> par exemple, une URL telle que http://example.com/test/controller/action/param1/var1/param2/var2 est équivalente à http://example.com/test/controller/action/param2/var2/param1/var1 mais les moteurs de recherche marqueront le contenu comme dupliqué. Dans ce cas-là, ce n&#8217;est plus du côté d’apache qu&#8217;il faut regarder mais bien du côté du moteur de votre site &#8230;</p>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-268-1'>On devrait dire <acronym title="Uniform Resource Identifiers">URI</acronym> selon la RFC 3986 mais <acronym title="Tout Le Monde S'En Fout">TLMSF</acronym> <span class='footnotereverse'><a href='#fnref-268-1'>&#8617;</a></span></li>
<li id='fn-268-2'>au pire vous serez blacklinker, au mieux votre référencement en pâtira <span class='footnotereverse'><a href='#fnref-268-2'>&#8617;</a></span></li>
<li id='fn-268-3'>Pour rappel, ce fichier se place à la base de votre URL, soit pour que dans notre exemple (http://www.example.com/test/) le fichier soit accessible via http://www.example.com/robots.txt <span class='footnotereverse'><a href='#fnref-268-3'>&#8617;</a></span></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/268/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GNU Affero General Public License : la GPL des applications web</title>
		<link>http://grummfy.be/blog/39#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/39#comments</comments>
		<pubDate>Fri, 15 Jun 2007 21:57:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[My comment]]></category>
		<category><![CDATA[actualité]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[politique]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[sortie]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=39</guid>
		<description><![CDATA[Parce que je pense que c&#8217;est une petite évolution &#8230; Si vous suivez mon fil rss marqué, vous devez l&#8217;avoir lu, sinon voici le lien, pas besoin de commentaires &#8230; http://linuxfr.org/2007/06/15/22630&#8230; A mon avis dans le future, ce sera parmi une des licences les plus utilisé sur le web&#8230;]]></description>
			<content:encoded><![CDATA[<p>Parce que je pense que c&#8217;est une petite évolution &#8230;</p>
<p>Si vous suivez mon fil rss marqué, vous devez l&#8217;avoir lu, sinon voici le lien, pas besoin de commentaires &#8230;</p>
<p><a href="http://linuxfr.org/2007/06/15/22630.html" title="http://linuxfr.org/2007/06/15/22630.html">http://linuxfr.org/2007/06/15/22630&#8230;</a></p>
<p>A mon avis dans le future, ce sera parmi une des licences les plus utilisé sur le web&#8230;</p>
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F39&amp;linkname=GNU%20Affero%20General%20Public%20License%20%3A%20la%20GPL%20des%20applications%20web" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F39&amp;linkname=GNU%20Affero%20General%20Public%20License%20%3A%20la%20GPL%20des%20applications%20web" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F39&amp;linkname=GNU%20Affero%20General%20Public%20License%20%3A%20la%20GPL%20des%20applications%20web" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F39&amp;linkname=GNU%20Affero%20General%20Public%20License%20%3A%20la%20GPL%20des%20applications%20web" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_google_bookmarks" href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F39&amp;linkname=GNU%20Affero%20General%20Public%20License%20%3A%20la%20GPL%20des%20applications%20web" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a><a class="a2a_button_netvibes_share" href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F39&amp;linkname=GNU%20Affero%20General%20Public%20License%20%3A%20la%20GPL%20des%20applications%20web" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgrummfy.be%2Fblog%2F39&amp;title=GNU%20Affero%20General%20Public%20License%20%3A%20la%20GPL%20des%20applications%20web" id="wpa2a_2"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/39/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>404 ou page non trouver?</title>
		<link>http://grummfy.be/blog/22#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/22#comments</comments>
		<pubDate>Fri, 13 Apr 2007 15:52:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=22</guid>
		<description><![CDATA[<p>Vous êtes certainement déjà tombé, un jour ou l'autre sur une page non trouvé (page not found, page non trouver, erreur 404).<br />
Parfois très moche, parfois joli voir le message de base du navigateur disant que la page n'a pas été trouvée.</p> <p>Essayons de comprendre le mécanisme et d'éviter cette erreur,<br />
De comprendre comment créer des pages plus évoluée que le simple message de apache ou du navigateur,<br />
Et de voir les erreurs, sur les pages d'erreurs ;), souvent rencontrée!</p>]]></description>
			<content:encoded><![CDATA[<p>Vous êtes certainement déjà tombé, un jour ou l&#8217;autre sur une page non trouvé (page not found, page non trouver, erreur 404).<br />
Parfois très moche, parfois joli voir le message de base du navigateur disant que la page n&#8217;a pas été trouvée.</p>
<p>Essayons de comprendre le mécanisme et d&#8217;éviter cette erreur,<br />
De comprendre comment créer des pages plus évoluée que le simple message de apache ou du navigateur,<br />
Et de voir les erreurs, sur les pages d&#8217;erreurs <img src='http://grummfy.be/blog/wp/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , souvent rencontrée!</p>
<p><span id="more-22"></span></p>
<h2>Qu&#8217;est-ce qui provoque une erreur 404?</h2>
<p><em>Et surtout comment l&#8217;éviter</em><br />
Normalement une erreur 404 provient lorsque un fichier(page, document, fichiers &#8230;) n&#8217;est pas trouvé.<br />
En pratique c&#8217;est souvent une erreur de lien mal fait, lien vers des fichiers qui n&#8217;existent plus, &#8230; Afin d&#8217;éviter une erreur 404, pouvant vous faire perdre des visiteurs (après tout ce qui reste s&#8217;il voit une bête page disant &laquo;&nbsp;fichier non trouvé!&nbsp;&raquo;).</p>
<ul>
<li>Pensez à tester les liens de votre site.</li>
<li>En cas de changement d&#8217;emplacement des fichiers, plusieurs possibilités s&#8217;offre à vous&nbsp;:
<ul>
<li>Effectuer une redirection (Via entête HTTP) de l&#8217;ancien lien vers le nouveau (pensez aux utilisateurs ayant stocker le dit lien, aux moteurs de recherches vous ayant indexer, &#8230;). Les moteurs de recherches effectueront la mise à jour et au bout d&#8217;un moment vous n&#8217;aurez plus qu&#8217;à utiliser le message décrit ci-après.</li>
<li>Afficher un message (pour l&#8217;utilisateur uniquement puisque le moteur de recherche ne le comprend pas) disant de se rendre à la base du site et de reprendre leur recherche. Ainsi l&#8217;utilisateur retrouvera (ou pas) sa page.</li>
</ul>
</li>
</ul>
<p>Je vous ai cité les deux qui me paraissent facile à mettre en place.</p>
<ul>
<li>Penser a vérifier le listing de vos pages indexer dans les moteurs de recherche, cela évite pas mal de surprise&#8230;.</li>
</ul>
<h2>Création d&#8217;une page d&#8217;erreur personnalisée</h2>
<blockquote><p>Attention il est possible que votre hébergeur ne vous y autorise pas!</p>
</blockquote>
<p>Il vous faut en premier lieux créer un fichier <q>.htaccess</q> dans lequel mettre ce code&nbsp;: <code>ErrorDocument 404 /totor/404.html</code></p>
<h4>Mais que va faire ce bout de code</h4>
<p>Lorsque une erreur 404 se produira, apache va afficher <q>/totor/404.html</q>.</p>
<p>Plus exactement, lorsque vous tapez <q>http://www.monsiteamoi.com/test/pagequiexistepas</q>, apache affichera le contenu de <q>http://www.monsiteamoi.com/totor/404.html</q>, tout en gardant l&#8217;url inchangé.</p>
<p>Cependant afin que les moteurs de recherche comprennent qu&#8217;il y a une erreur une entête HTTP 404 est quand même généré! Il ne vous reste plus qu&#8217;à créer la page 404.html.</p>
<h2>Erreur la plus couramment trouver dans les tutoriaux</h2>
<p>Dans énormément de tutoriaux on trouve cette erreur&nbsp;:</p>
<blockquote><p>Mettre ceci dans votre fichier .htaccess&nbsp;: <q>ErrorDocument 404 http://www.monsiteamoi.com/totor/404.html</q></p>
</blockquote>
<p>Or cela à pour effet de oui afficher la page 404, mais le code HTTP que renvoi la page est 200 (soit que tout va bien) donc les moteurs de recherche (entre-autres) vont continuer à indexer cette page!</p>
<h2>A noter</h2>
<ul>
<li>Les autres erreurs HTTP peuvent être traité de la même manière</li>
<li>Vous pouvez utiliser un script PHP afin de par exemple gérer toutes les erreurs <q>ErrorDocument 404 /error.php?code=404</q></li>
<li>Tester vos entêtes HTTP avec firefox via l&#8217;extension webDevlopper (menu information, entête HTTP)</li>
</ul>
<h2>Quelques liens&nbsp;:</h2>
<ul>
<li><a href="http://fr.wikipedia.org/wiki/Erreur_HTTP_404" hreflang="fr">Erreur HTTP 404</a></li>
<li><a href="http://en.wikipedia.org/wiki/HTTP_404" hreflang="en">HTTP 404</a></li>
<li><a href="http://fr.wikipedia.org/wiki/Liste_des_codes_HTTP" hreflang="fr">Liste des codes HTTP</a></li>
<li><a href="http://www.lightecho.net/404page/404_fame.html" hreflang="en">Les meilleurs pages 404</a></li>
<li><a href="http://www.365questions.org/2006/10/15/is-there-an-art-of-404-pages/" hreflang="en" class="broken_link">Quelques autres page 404 marante</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/22/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.534 seconds -->

