2009-11-22 5 views
1

Je veux toutes mes pages de travailler si l'utilisateur a ajouté un slash à la fin ou nonslash donne l'erreur interne du serveur

la marche ligne suivante

RewriteRule ^index/page/([0-9]+)/?$ /cmstut/index.php?page=$1 [QSA,L] 

mais la ligne suivante provoque une erreur interne du serveur, il est la dernière ligne C'est la ligne qui devrait réécrire toutes les autres pages qui ne disposent pas des attributs tels que la page de contact, de nous page ou page d'index

RewriteRule ^(.+[^/])/?$ /cmstut/$1.php [QSA,L] 
+0

Qu'est-ce que vous voulez dire par cette expression rationnelle. + [^ /]? – Dmitry

+0

http://stackoverflow.com/questions/314872/mod-rewrite-trailing-slash-issue voir la réponse de greg – Christophe

Répondre

3

Vous devriez mieux utiliser une seule orthographe (avec ou sans slash) et rediriger si le chemin URI est incorrect:

# add trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301] 

# remove trailing slash 
RewriteRule (.+)/$ /$1 [L,R=301] 
+0

Je vois, je pense que ce serait mieux. donc je copie la barre oblique de fin d'ajout ou la barre oblique de fin de suppression, mais pas les deux droite? qui, à votre avis, est meilleur, avec ou sans? – Christophe

+0

@krike: Oui, vous n'auriez besoin que de l'une des deux règles. Sinon, vous obtiendrez une boucle de récursion infinie. Et je préférerais celui sans la barre oblique. – Gumbo

+0

Je remplacé RewriteRule^(. + [^ /])/$ /cmstut/$1.php [QSA, L] avec RewriteRule (. +)/$/Cmstut/$ 1 [L, R = 301] si je navigue pour http: // localhost/cmstut/tutorial/65/ne devrait-il pas supprimer le dernier/?? Je peux maintenant à la fois parcourir http: // localhost/cmstut/tutorial/65/et http: // localhost/cmstut/tutorial/65 et ne pas avoir d'erreur de serveur interne :) donc d'une certaine manière, il est corrigé, si vous pourrait juste clarifier ma question ci-dessus – Christophe