Question

Le code suivant me donne une erreur de serveur interne et je ne peux pas comprendre pourquoi.

RewriteEngine On
SetEnv APPLICATION production
RewriteCond %{ENV:APPLICATION} =production
RewriteRule ^.*$ - [S=1] 
RewriteRule ^(.*)$ html/$1.html

Tout ce qu'il doit faire est de prendre l'url

/test

et leur tour faire référence

/html/test.html

dans les coulisses, mais seulement si l'environnement est la production, qui est fixé par le SetEnv

Pas de solution correcte

Autres conseils

Peut-être que mon mod rewrite est rouillé, mais si je comprends bien, qui semble faire le contraire de ce que vous dites. Si l'application est la production, il ne refera pas l'URL (et il ignore la règle qui). Je ne vois rien qui provoquerait une erreur de serveur interne bien.

Pour faire ce que vous dites, vous auriez besoin quelque chose comme:

RewriteEngine On
SetEnv APPLICATION production
RewriteCond %{ENV:APPLICATION} !=production
RewriteRule ^.*$ - [S=1] 
RewriteRule ^(.*)$ html/$1.html

Si vous rencontrez toujours des problèmes, vérifiez votre erreur apache journal, qui a les meilleures infos pour Internal Server Error 500

Soit faire comme Todd Gardner dit ou supprimer la règle redondante et lier la condition à la deuxième règle:

RewriteEngine On
RewriteCond %{ENV:APPLICATION} =production
RewriteRule ^(.*)$ html/$1.html

De plus j'utiliser cette règle au lieu d'éviter récursion:

RewriteCond %{ENV:APPLICATION} =production
RewriteRule !^html/ html%{REQUEST_URI}.html

Activer la journalisation mod rewrite pour obtenir des erreurs utiles.

RewriteLog rewrite_log
ReWriteLogLevel 2

Régler le niveau de journalisation pour verbosité.

Vous devez mettre des guillemets autour de la chaîne pour le comparer correctement

RewriteCond %{ENV:APPLICATION} !="production"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top