{"id":289,"date":"2010-06-04T15:15:29","date_gmt":"2010-06-04T13:15:29","guid":{"rendered":"http:\/\/grummfy.be\/blog\/?p=289"},"modified":"2010-06-04T15:08:07","modified_gmt":"2010-06-04T13:08:07","slug":"reecriture-durl-et-erreur-interne-a-apache","status":"publish","type":"post","link":"https:\/\/grummfy.be\/blog\/289","title":{"rendered":"R\u00e9\u00e9criture d&rsquo;url et erreur interne \u00e0 Apache"},"content":{"rendered":"<p>Il arrive que lors de l&rsquo;\u00e9criture d&rsquo;un nombre complexe de r\u00e8gle de r\u00e9\u00e9criture d&rsquo;URL (URL rewriting), des erreurs se produisent sans pour autant \u00eatre compr\u00e9hensibles. Je vous propose donc de regarder comment d\u00e9boguer cela \u00e0 travers un exemple pratique.<\/p>\n<h2>Exemple<\/h2>\n<p>Prenons une r\u00e8gles qui v\u00e9rifierait que seul certains type de caract\u00e8re sont autoris\u00e9s.<br \/>\nLa r\u00e9\u00e9criture quant \u00e0 elle se fait sur toute URL.<br \/>\nAjoutons un document 403 personnalis\u00e9<br \/>\n<code>RewriteEngine on<br \/>\n#<br \/>\nRewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/ [NC]<br \/>\nRewriteRule .* - [F,NS,L]<br \/>\n#<br \/>\n#if not a dir or a file<br \/>\nRewriteCond %{REQUEST_FILENAME} !-f<br \/>\nRewriteCond %{REQUEST_FILENAME} !-d<br \/>\n#<br \/>\nRewriteRule ^(.*)$ index.php?p=$1 [QSA,L]<br \/>\nErrorDocument 403 \/erreur\/403<br \/>\n<\/code><br \/>\nTestons l&rsquo;URL http:\/\/localhost\/test:s et on obtient un beau :<\/p>\n<blockquote><p>Forbidden<\/p>\n<p>You don&rsquo;t have permission to access \/test:s on this server.<\/p>\n<p>Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.<\/p><\/blockquote>\n<p>Les logs d&rsquo;erreurs d&rsquo;Apache vous diront certainement quelque chose du genre :<\/p>\n<blockquote><p>[error] [client 127.0.0.1] Request exceeded the limit of 10 internal  redirects due to probable configuration error. Use  &lsquo;LimitInternalRecursion&rsquo; to increase the limit if necessary. Use  &lsquo;LogLevel debug&rsquo; to get a backtrace.<\/p><\/blockquote>\n<h2>Passage en mode debug de Apache<\/h2>\n<p>Modifions la r\u00e8gle de log du site courant (soit dans \/etc\/apache2\/sites-available\/default soit dans \/etc\/apache2\/apache.conf ou l&rsquo;\u00e9quivalent suivant votre configuration ou OS) et modifions la directive <em>\u00ab\u00a0LogLevel warn\u00a0\u00bb<\/em> en <em>\u00ab\u00a0LogLevel debug\u00a0\u00bb<\/em>. Ceci ne change rien dans notre cas, mais parfois cela s&rsquo;av\u00e8re utile&#8230;<\/p>\n<p>Ajoutons ensuite les log<sup class='footnote'><a href='#fn-289-1' id='fnref-289-1' onclick='return fdfootnote_show(289)'>1<\/a><\/sup> de r\u00e9\u00e9criture d&rsquo;url (moi je l&rsquo;ai ajouter dans \/etc\/apache2\/mods-available\/rewrite.conf puis j&rsquo;ai fait un a2enmod rewrite (car le fichier .conf n&rsquo;existait pas) et enfin j&rsquo;ai relancer Apache) :<br \/>\n<code>&lt;IfModule mod_rewrite.c&gt;<br \/>\nRewriteLog \"\/var\/log\/apache2\/rewrite.log\"<br \/>\nRewriteLogLevel 9<br \/>\n&lt;\/IfModule&gt;<\/code><\/p>\n<p>Maintenant si vous aller voir dans error.log vous aurez :<\/p>\n<blockquote><p>[error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use &lsquo;LimitInternalRecursion&rsquo; to increase the limit if necessary. Use &lsquo;LogLevel debug&rsquo; to get a backtrace.<br \/>\n[debug] core.c(3063): [client 127.0.0.1] r-&gt;uri = \/&#8230;\/erreur\/403<br \/>\n[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = \/&#8230;\/erreur\/403<br \/>\n[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = \/&#8230;\/erreur\/403<br \/>\n[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = \/&#8230;\/erreur\/403<br \/>\n[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = \/&#8230;\/erreur\/403<br \/>\n[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = \/&#8230;\/erreur\/403<br \/>\n[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = \/&#8230;\/erreur\/403<br \/>\n[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = \/&#8230;\/erreur\/403<br \/>\n[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = \/&#8230;\/erreur\/403<br \/>\n[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = \/&#8230;\/erreur\/403<br \/>\n[debug] core.c(3069): [client 127.0.0.1] redirected from r-&gt;uri = \/&#8230;\/test:s<\/p><\/blockquote>\n<p>Donc on voit que la redirection s&rsquo;effectue correctement mais qu&rsquo;il \u00ab\u00a0<em>n&rsquo;accroche<\/em>\u00a0\u00bb pas. Regardons donc les logs de la r\u00e9\u00e9criture d&rsquo;URL (rewrite.log) :<\/p>\n<blockquote><p>\/initial] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/test:s -&gt; test:s<br \/>\n\/initial] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;test:s&rsquo;<br \/>\n\/initial] (4) [perdir \/&#8230;\/] RewriteCond: input=\u00a0\u00bb pattern=&rsquo;200&prime; =&gt; not-matched<br \/>\n\/initial] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/test:s -&gt; test:s<br \/>\n\/initial] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;test:s&rsquo;<br \/>\n\/initial] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/test:s<br \/>\n\/initial\/redir#1] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#1] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#1] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#1] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;403&prime; pattern=&rsquo;200&rsquo; =&gt; not-matched<br \/>\n\/initial\/redir#1] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#1] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#1] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#1] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial\/redir#1] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/erreur<br \/>\n\/initial\/redir#2] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#2] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#2] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#2] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;403&prime; pattern=&rsquo;200&rsquo; =&gt; not-matched<br \/>\n\/initial\/redir#2] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#2] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#2] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#2] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial\/redir#2] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/erreur<br \/>\n\/initial\/redir#3] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#3] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#3] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#3] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;403&prime; pattern=&rsquo;200&rsquo; =&gt; not-matched<br \/>\n\/initial\/redir#3] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#3] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#3] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#3] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial\/redir#3] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/erreur<br \/>\n\/initial\/redir#4] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#4] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#4] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#4] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;403&prime; pattern=&rsquo;200&rsquo; =&gt; not-matched<br \/>\n\/initial\/redir#4] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#4] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#4] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#4] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial\/redir#4] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/erreur<br \/>\n\/initial\/redir#5] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#5] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#5] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#5] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;403&prime; pattern=&rsquo;200&rsquo; =&gt; not-matched<br \/>\n\/initial\/redir#5] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#5] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#5] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#5] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial\/redir#5] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/erreur<br \/>\n\/initial\/redir#6] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#6] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#6] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#6] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;403&prime; pattern=&rsquo;200&rsquo; =&gt; not-matched<br \/>\n\/initial\/redir#6] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#6] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#6] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#6] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial\/redir#6] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/erreur<br \/>\n\/initial\/redir#7] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#7] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#7] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#7] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;403&prime; pattern=&rsquo;200&rsquo; =&gt; not-matched<br \/>\n\/initial\/redir#7] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#7] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#7] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#7] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial\/redir#7] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/erreur<br \/>\n\/initial\/redir#8] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#8] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#8] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#8] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;403&prime; pattern=&rsquo;200&rsquo; =&gt; not-matched<br \/>\n\/initial\/redir#8] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#8] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#8] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#8] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial\/redir#8] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/erreur<br \/>\n\/initial\/redir#9] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#9] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#9] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#9] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;403&prime; pattern=&rsquo;200&rsquo; =&gt; not-matched<br \/>\n\/initial\/redir#9] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#9] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#9] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#9] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial\/redir#9] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/erreur<br \/>\n\/initial\/redir#10] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#10] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#10] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#10] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;403&prime; pattern=&rsquo;200&rsquo; =&gt; not-matched<br \/>\n\/initial\/redir#10] (3) [perdir \/&#8230;\/] add path info postfix: \/&#8230;\/erreur -&gt; \/&#8230;\/erreur\/403<br \/>\n\/initial\/redir#10] (3) [perdir \/&#8230;\/] strip per-dir prefix: \/&#8230;\/erreur\/403 -&gt; erreur\/403<br \/>\n\/initial\/redir#10] (3) [perdir \/&#8230;\/] applying pattern &lsquo;.*&rsquo; to uri &lsquo;erreur\/403&prime;<br \/>\n\/initial\/redir#10] (4) [perdir \/&#8230;\/] RewriteCond: input=&rsquo;GET \/&#8230;\/test:s HTTP\/1.1&prime; pattern=&rsquo;!^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/&rsquo; [NC] =&gt; matched<br \/>\n\/initial\/redir#10] (2) [perdir \/&#8230;\/] forcing responsecode 403 for \/&#8230;\/erreur<\/p><\/blockquote>\n<p>En gros, nous avions une boucle de redirection. Pour l&rsquo;\u00e9viter ajoutons,d ans le .htaccess, une condition qui dira de ne pas rentrer dans le bloc, s&rsquo;il y a une erreur 403 :<br \/>\n<code>RewriteEngine on<br \/>\n#<br \/>\nRewriteCond %{ENV:REDIRECT_STATUS} !403<br \/>\nRewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\\ [a-zA-Z0-9\\.\\+_\/\\-\\?\\=\\&amp;]+\\ HTTP\/ [NC]<br \/>\nRewriteRule .* - [F,NS,L]<br \/>\n#<br \/>\n#if not a dir or a file<br \/>\nRewriteCond %{REQUEST_FILENAME} !-f<br \/>\nRewriteCond %{REQUEST_FILENAME} !-d<br \/>\n#<br \/>\nRewriteRule ^(.*)$ index.php?p=$1 [QSA,L]<br \/>\nErrorDocument 403 \/erreur\/403<br \/>\n<\/code><br \/>\nMaintenant tout fonctionne comme pr\u00e9vu!<\/p>\n<h2>La fin<\/h2>\n<p>Pour finir, ceci montre encore l&rsquo;importance des logs lors de la rencontre de probl\u00e8me. S&rsquo;il y a moyen penser a les activer, cela simplifie franchement la t\u00e2che de d\u00e9bogage que cela soit pour Apache mais aussi pour tout projet informatique.<\/p>\n<p>Un dernier conseil, pensez a d\u00e9sactiver le mode debug de Apache une fois fini!<\/p>\n<p>S&rsquo;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>\n<div class='footnotes' id='footnotes-289'>\n<div class='footnotedivider'><\/div>\n<ol>\n<li id='fn-289-1'> Si le fichier ne se cr\u00e9er pas tout seul penser \u00e0 le cr\u00e9er <span class='footnotereverse'><a href='#fnref-289-1'>&#8617;<\/a><\/span><\/li>\n<\/ol>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Il arrive que lors de l&rsquo;\u00e9criture d&rsquo;un nombre complexe de r\u00e8gle de r\u00e9\u00e9criture d&rsquo;URL, des erreurs se produisent. Passons au d\u00e9bogage de celles-ci.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[9],"tags":[36,97,101,100,37],"class_list":["post-289","post","type-post","status-publish","format-standard","hentry","category-dev","tag-apache","tag-deboguage","tag-serveur","tag-url-rewriting","tag-web"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"Il arrive que lors de l&#039;\u00e9criture d&#039;un nombre complexe de r\u00e8gle de r\u00e9\u00e9criture d&#039;URL, des erreurs se produisent. Passons au d\u00e9bogage de celles-ci.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Grummfy\"\/>\n\t<meta name=\"google-site-verification\" content=\"d4qc9gnvtzVc9s5gDVkEqZIVZLo42Wi\/lYmFP7\/G0Kw=\" \/>\n\t<meta name=\"keywords\" content=\"seo,apache,url rewriting,r\u00e9\u00e9crituire d\\&#039;url,r\u00e9f\u00e9rencement,deboguage,debug,serveur,web,d\u00e9veloppement\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/grummfy.be\/blog\/289\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Grummfy&#039;s project\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Grummfy&#039;s project .:. R\u00e9\u00e9criture d&#039;url et erreur interne \u00e0 Apache\" \/>\n\t\t<meta property=\"og:description\" content=\"Il arrive que lors de l&#039;\u00e9criture d&#039;un nombre complexe de r\u00e8gle de r\u00e9\u00e9criture d&#039;URL, des erreurs se produisent. Passons au d\u00e9bogage de celles-ci.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/grummfy.be\/blog\/289\" \/>\n\t\t<meta property=\"fb:admins\" content=\"580961199\" \/>\n\t\t<meta property=\"article:tag\" content=\"seo\" \/>\n\t\t<meta property=\"article:tag\" content=\"apache\" \/>\n\t\t<meta property=\"article:tag\" content=\"url rewriting\" \/>\n\t\t<meta property=\"article:tag\" content=\"r\u00e9\u00e9crituire d\\&#039;url\" \/>\n\t\t<meta property=\"article:tag\" content=\"r\u00e9f\u00e9rencement\" \/>\n\t\t<meta property=\"article:tag\" content=\"deboguage\" \/>\n\t\t<meta property=\"article:tag\" content=\"debug\" \/>\n\t\t<meta property=\"article:tag\" content=\"serveur\" \/>\n\t\t<meta property=\"article:tag\" content=\"web\" \/>\n\t\t<meta property=\"article:tag\" content=\"d\u00e9veloppement\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2010-06-04T13:15:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2010-06-04T13:08:07+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@Grummfy\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Grummfy&#039;s project .:. R\u00e9\u00e9criture d&#039;url et erreur interne \u00e0 Apache\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Il arrive que lors de l&#039;\u00e9criture d&#039;un nombre complexe de r\u00e8gle de r\u00e9\u00e9criture d&#039;URL, des erreurs se produisent. Passons au d\u00e9bogage de celles-ci.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/289#article\",\"name\":\"Grummfy's project .:. R\\u00e9\\u00e9criture d'url et erreur interne \\u00e0 Apache\",\"headline\":\"R\\u00e9\\u00e9criture d&rsquo;url et erreur interne \\u00e0 Apache\",\"author\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/author\\\/admin#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/#organization\"},\"datePublished\":\"2010-06-04T15:15:29+02:00\",\"dateModified\":\"2010-06-04T15:08:07+02:00\",\"inLanguage\":\"fr-BE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/289#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/289#webpage\"},\"articleSection\":\"D\\u00e9veloppement, apache, deboguage, serveur, url rewriting, web\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/289#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog#listItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/grummfy.be\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/cat\\\/dev#listItem\",\"name\":\"D\\u00e9veloppement\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/cat\\\/dev#listItem\",\"position\":2,\"name\":\"D\\u00e9veloppement\",\"item\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/cat\\\/dev\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/289#listItem\",\"name\":\"R\\u00e9\\u00e9criture d&rsquo;url et erreur interne \\u00e0 Apache\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog#listItem\",\"name\":\"Accueil\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/289#listItem\",\"position\":3,\"name\":\"R\\u00e9\\u00e9criture d&rsquo;url et erreur interne \\u00e0 Apache\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/cat\\\/dev#listItem\",\"name\":\"D\\u00e9veloppement\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/#organization\",\"name\":\"Grummfy's project\",\"description\":\"Mes projets, mes r\\u00eaves, mes envies, ...\",\"url\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/author\\\/admin#author\",\"url\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/author\\\/admin\",\"name\":\"Grummfy\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/289#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/97f073e7de2fb1e9d5c5329eb7db2c6de1c5a80e8cfe9b1233473f78a1c908f6?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Grummfy\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/289#webpage\",\"url\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/289\",\"name\":\"Grummfy's project .:. R\\u00e9\\u00e9criture d'url et erreur interne \\u00e0 Apache\",\"description\":\"Il arrive que lors de l'\\u00e9criture d'un nombre complexe de r\\u00e8gle de r\\u00e9\\u00e9criture d'URL, des erreurs se produisent. Passons au d\\u00e9bogage de celles-ci.\",\"inLanguage\":\"fr-BE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/289#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/author\\\/admin#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/author\\\/admin#author\"},\"datePublished\":\"2010-06-04T15:15:29+02:00\",\"dateModified\":\"2010-06-04T15:08:07+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/\",\"name\":\"Grummfy's project\",\"description\":\"Mes projets, mes r\\u00eaves, mes envies, ...\",\"inLanguage\":\"fr-BE\",\"publisher\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Grummfy's project .:. R\u00e9\u00e9criture d'url et erreur interne \u00e0 Apache","description":"Il arrive que lors de l'\u00e9criture d'un nombre complexe de r\u00e8gle de r\u00e9\u00e9criture d'URL, des erreurs se produisent. Passons au d\u00e9bogage de celles-ci.","canonical_url":"https:\/\/grummfy.be\/blog\/289","robots":"max-image-preview:large","keywords":"seo,apache,url rewriting,r\u00e9\u00e9crituire d\\'url,r\u00e9f\u00e9rencement,deboguage,debug,serveur,web,d\u00e9veloppement","webmasterTools":{"google-site-verification":"d4qc9gnvtzVc9s5gDVkEqZIVZLo42Wi\/lYmFP7\/G0Kw=","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/grummfy.be\/blog\/289#article","name":"Grummfy's project .:. R\u00e9\u00e9criture d'url et erreur interne \u00e0 Apache","headline":"R\u00e9\u00e9criture d&rsquo;url et erreur interne \u00e0 Apache","author":{"@id":"https:\/\/grummfy.be\/blog\/author\/admin#author"},"publisher":{"@id":"https:\/\/grummfy.be\/blog\/#organization"},"datePublished":"2010-06-04T15:15:29+02:00","dateModified":"2010-06-04T15:08:07+02:00","inLanguage":"fr-BE","mainEntityOfPage":{"@id":"https:\/\/grummfy.be\/blog\/289#webpage"},"isPartOf":{"@id":"https:\/\/grummfy.be\/blog\/289#webpage"},"articleSection":"D\u00e9veloppement, apache, deboguage, serveur, url rewriting, web"},{"@type":"BreadcrumbList","@id":"https:\/\/grummfy.be\/blog\/289#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog#listItem","position":1,"name":"Accueil","item":"https:\/\/grummfy.be\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog\/cat\/dev#listItem","name":"D\u00e9veloppement"}},{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog\/cat\/dev#listItem","position":2,"name":"D\u00e9veloppement","item":"https:\/\/grummfy.be\/blog\/cat\/dev","nextItem":{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog\/289#listItem","name":"R\u00e9\u00e9criture d&rsquo;url et erreur interne \u00e0 Apache"},"previousItem":{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog#listItem","name":"Accueil"}},{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog\/289#listItem","position":3,"name":"R\u00e9\u00e9criture d&rsquo;url et erreur interne \u00e0 Apache","previousItem":{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog\/cat\/dev#listItem","name":"D\u00e9veloppement"}}]},{"@type":"Organization","@id":"https:\/\/grummfy.be\/blog\/#organization","name":"Grummfy's project","description":"Mes projets, mes r\u00eaves, mes envies, ...","url":"https:\/\/grummfy.be\/blog\/"},{"@type":"Person","@id":"https:\/\/grummfy.be\/blog\/author\/admin#author","url":"https:\/\/grummfy.be\/blog\/author\/admin","name":"Grummfy","image":{"@type":"ImageObject","@id":"https:\/\/grummfy.be\/blog\/289#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/97f073e7de2fb1e9d5c5329eb7db2c6de1c5a80e8cfe9b1233473f78a1c908f6?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Grummfy"}},{"@type":"WebPage","@id":"https:\/\/grummfy.be\/blog\/289#webpage","url":"https:\/\/grummfy.be\/blog\/289","name":"Grummfy's project .:. R\u00e9\u00e9criture d'url et erreur interne \u00e0 Apache","description":"Il arrive que lors de l'\u00e9criture d'un nombre complexe de r\u00e8gle de r\u00e9\u00e9criture d'URL, des erreurs se produisent. Passons au d\u00e9bogage de celles-ci.","inLanguage":"fr-BE","isPartOf":{"@id":"https:\/\/grummfy.be\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/grummfy.be\/blog\/289#breadcrumblist"},"author":{"@id":"https:\/\/grummfy.be\/blog\/author\/admin#author"},"creator":{"@id":"https:\/\/grummfy.be\/blog\/author\/admin#author"},"datePublished":"2010-06-04T15:15:29+02:00","dateModified":"2010-06-04T15:08:07+02:00"},{"@type":"WebSite","@id":"https:\/\/grummfy.be\/blog\/#website","url":"https:\/\/grummfy.be\/blog\/","name":"Grummfy's project","description":"Mes projets, mes r\u00eaves, mes envies, ...","inLanguage":"fr-BE","publisher":{"@id":"https:\/\/grummfy.be\/blog\/#organization"}}]},"og:locale":"fr_FR","og:site_name":"Grummfy's project","og:type":"article","og:title":"Grummfy's project .:. R\u00e9\u00e9criture d'url et erreur interne \u00e0 Apache","og:description":"Il arrive que lors de l'\u00e9criture d'un nombre complexe de r\u00e8gle de r\u00e9\u00e9criture d'URL, des erreurs se produisent. Passons au d\u00e9bogage de celles-ci.","og:url":"https:\/\/grummfy.be\/blog\/289","fb:admins":"580961199","article:tag":["seo","apache","url rewriting","r\u00e9\u00e9crituire d\\'url","r\u00e9f\u00e9rencement","deboguage","debug","serveur","web","d\u00e9veloppement"],"article:published_time":"2010-06-04T13:15:29+00:00","article:modified_time":"2010-06-04T13:08:07+00:00","twitter:card":"summary","twitter:site":"@Grummfy","twitter:title":"Grummfy's project .:. R\u00e9\u00e9criture d'url et erreur interne \u00e0 Apache","twitter:description":"Il arrive que lors de l'\u00e9criture d'un nombre complexe de r\u00e8gle de r\u00e9\u00e9criture d'URL, des erreurs se produisent. Passons au d\u00e9bogage de celles-ci."},"aioseo_meta_data":{"post_id":"289","title":"#site_title .:. R\u00e9\u00e9criture d'url et erreur interne \u00e0 Apache","description":"Il arrive que lors de l'\u00e9criture d'un nombre complexe de r\u00e8gle de r\u00e9\u00e9criture d'URL, des erreurs se produisent. Passons au d\u00e9bogage de celles-ci.","keywords":[{"label":"SEO","value":"SEO"},{"label":"Apache","value":"Apache"},{"label":"url rewriting","value":"url rewriting"},{"label":"r\u00e9\u00e9crituire d'url","value":"r\u00e9\u00e9crituire d'url"},{"label":"r\u00e9f\u00e9rencement","value":"r\u00e9f\u00e9rencement"},{"label":"deboguage","value":"deboguage"},{"label":"debug","value":"debug"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[],"defaultGraph":"","defaultPostTypeGraph":""},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-01-21 15:11:40","updated":"2025-06-04 00:22:56","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/grummfy.be\/blog\" title=\"Accueil\">Accueil<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/grummfy.be\/blog\/cat\/dev\" title=\"D\u00e9veloppement\">D\u00e9veloppement<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tR\u00e9\u00e9criture d\u2019url et erreur interne \u00e0 Apache\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Accueil","link":"https:\/\/grummfy.be\/blog"},{"label":"D\u00e9veloppement","link":"https:\/\/grummfy.be\/blog\/cat\/dev"},{"label":"R\u00e9\u00e9criture d&rsquo;url et erreur interne \u00e0 Apache","link":"https:\/\/grummfy.be\/blog\/289"}],"_links":{"self":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/comments?post=289"}],"version-history":[{"count":11,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/289\/revisions"}],"predecessor-version":[{"id":302,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/289\/revisions\/302"}],"wp:attachment":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/media?parent=289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/categories?post=289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/tags?post=289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}