2009-05-30 11 views
0

Le code suivant me donne une erreur de serveur interne et je ne peux pas déterminer pourquoi.Mod Rewrite Ignorer les règles Erreur du serveur

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

Répondre

1

Peut-être que ma réécriture mod est rouillée, mais si je comprends bien, cela semble faire le contraire de ce que vous dites. Si l'application est la production, alors elle ne réécrira pas l'URL (et elle ignore la règle qui le ferait). Je ne vois rien qui puisse provoquer une erreur interne du serveur.

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 avez encore des problèmes, vérifiez votre erreur apache journal, qui a les meilleures infos pour Internal Server Error 500

0

ou faire comme Todd Gardner dit ou supprimer la règle redondante et lier la condition à la seconde 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 
0

activer la journalisation mod rewrite pour obtenir des erreurs utiles.

RewriteLog rewrite_log 
ReWriteLogLevel 2 

Ajustez le niveau de consignation pour la verbosité.

0

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

RewriteCond %{ENV:APPLICATION} !="production"