Pluxopolis

Tout savoir pour devenir un pro de PluXml, mais pas seulement...

Résoudre le problème de réécriture d'url de PluXml sous Apache 1.3.x

Rédigé par Stéphane Aucun commentaire

Si vous avez activé la réécriture d'url de PluXml et que votre serveur ou hébergeur tourne sous Apache 1.3.x, vous avez certainement rencontré le code erreur 500 Internal Serveur Erreur avec comme message:

En cause une règle d'écriture dans le fichier .htaccess non compatible avec Apache 1.3.x.
Pour contourner ce problème, je vous propose une solution.

Lorsque vous activez la réécriture d'url dans PluXml (Administration > Paramètres > Configuration avancée, puis déroulant Activer la réécriture d'urls sur Oui), un fichier .htaccess est créé à la racine de votre site avec le contenu suivant:


# BEGIN -- Pluxml
Options -Multiviews
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# Réécriture des urls
RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
</IfModule>
<Files "version">
	Order allow,deny
	Deny from all
</Files>
# END -- Pluxml
La ligne qui pose problème et qui génère le code erreur 500 est:

RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
Plus précisément c'est l'utilisation des deux caractères ?! (qu'on appelle negative lookahead ou assertion négative) qui n'est pas reconnue par Apache 1.3.x

Apache 1.3 n'utilise pas les expressions régulières compatibles Perl (PCRE). Il utilise les regexes POSIX. Or les expressions régulières POSIX ne supportent pas les assertions négatives (negative lookahead). Le support de PCRE est une fonctionnalité supportée qu'à partir de Apache 2.

La solution est donc de changer cette ligne en utilisant une syntaxe n'utilisant pas de negative lookahead.

Remplacer la ligne:


RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
par

RewriteCond $1 !^(feed)
RewriteRule ^(.*)$ index.php?$1 [L]
Votre fichier .htaccess devrait donc maintenant ressembler à ceci:

# BEGIN -- Pluxml
Options -Multiviews
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# Réécriture des urls
RewriteCond $1 !^(feed)
RewriteRule ^(.*)$ index.php?$1 [L]
RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
</IfModule>
<Files "version">
	Order allow,deny
	Deny from all
</Files>
# END -- Pluxml

Si vous êtes sous Apache 1.3 et concerné par cette erreur, n'hésitez pas à me laisser un petit message pour me confirmer la résolution du problème.

PS: l'autre solution est de passer sous Apache 2.x

Fil RSS des commentaires de cet article

Écrire un commentaire

Quelle est la deuxième lettre du mot ctxgny ?
Top