2010-10-14 9 views
0

j'ai cette URL que je voulais faire amicale, en utilisant rewrite sur .htaccess mais il me donne une erreur (500 erreur interne du serveur), ceci est mon orginal php urlhtaccess réécriture me donne 500 erreur?

http://www.example.com/viewtopic.php?topic=lovetopic 

je veux changer à ceci:

http://www.example.com/lovetopic 

cela est tout mon code htaccess est le suivant:

RewriteEngine On 
RewriteRule ^user/([^/]*)$ /viewprofile.php?user=$1 [L] 
RewriteRule ^([^/]*)$ /viewtopic.php?topic=$1 [L] 

je ne sais pas ce que le problème est

EDIT le journal des erreurs du serveur me donne cette erreur

[Thu Oct 14 20:34:36 2010] [error] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., 
+0

Avez-vous vérifié ed les journaux? –

+0

je mets ce que le journal des erreurs du serveur me donne, merci :)) – getaway

+0

depuis que je mets la réécriture pour le sujet url, son été en me donnant ces 500 erreurs internes – getaway

Répondre

4

Le motif de votre deuxième règle ^([^/]*)$ ne correspond aussi /viewtopic.php sans le préfixe de chemin /, à savoir viewtopic.php. C'est pourquoi vous avez une récursion infinie.

Vous pouvez utiliser la condition suivante pour exclure:

RewriteCond $1 !=viewtopic.php 
RewriteRule ^([^/]*)$ /viewtopic.php?topic=$1 [L] 

Ou utiliser cette condition pour exclure tous les fichiers existants:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]*)$ /viewtopic.php?topic=$1 [L] 

Ou utiliser cette règle devant vous d'autres règles pour arrêter chaque requête qui peut être mappée à un fichier existant en cours de réécriture par les règles suivantes:

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 
+0

ne devrait pas La balise '[L]' déjà prévenir récursion? – Powerlord

+0

D'oh, je viens de vérifier ... non, '[L]' n'empêche pas les redirections internes de provoquer le retraitement de toutes les règles sur la nouvelle URL. – Powerlord

+0

@R. Bemrose: Non, l'indicateur [* L *] (http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteflags) est un peu différent: "Souvenez-vous cependant que si le RewriteRule génère une redirection interne (qui se produit fréquemment lors de la réécriture dans un contexte par répertoire), cela va réinjecter la requête et entraînera le traitement à répéter à partir de la première RewriteRule. " – Gumbo