goulvench Posté 27 Octobre 2009 Posté 27 Octobre 2009 Bonjour, Pour rediriger des adresses du type /index.php/page.html en /page.html, j'utilise : RewriteRule ^index\.php\/(.*)\.html$ $1.html [R=301,L] De plus, je dois réécrire (en interne seulement) /page.html en /index.php/page.html. Pour cela, j'utilise le code : RewriteCond %{REQUEST_FILENAME} !^index\.phpRewriteCond %{REQUEST_FILENAME} ^(.+)\.htmlRewriteRule ^(.*)$ index.php/$1 [L,QSA] Ces 2 règles fonctionnent très bien isolément, mais quand j'active les 2 ça provoque une boucle -malgré le flag "Last". Voici ce que je trouve dans le RewriteLog (en résumé) : internal redirect with /index.php/page.html [INTERNAL REDIRECT]escaping http://monsite.local/page.html for redirectredirect to http://monsite.local/page.html [REDIRECT/301] J'ai donc 3 questions : 1) Pourquoi la deuxième règle provoque-t-elle une réécriture interne quand la première est active, alors qu'elle est en deuxième position et que je précise [L] pour que d'autres règles ne s'appliquent pas ? 2) Je croyais avoir compris que le fichier htaccess est lu 1 seule fois à chaque requête HTTP, mais j'en conclus qu'il est lu à chaque requête ET à chaque fois qu'une RewriteRule a modifié l'adresse de la page demandée. C'est bien ça ? 3) Si c'est le cas, je dois donc n'appliquer ma première règle qu'aux URLs externes (demandées par HTTP), et surtout pas aux URLs réécrites en interne. Mais comment ? Je provoque une erreur 500 quand je précède la première règle avec : RewriteCond %{REQUEST_URI} ^index\.php\/(.*)\.html$ Merci de vos avis éclairés !
Patrick Posté 27 Octobre 2009 Posté 27 Octobre 2009 Salut, je ne comprend pas très bien ce que tu désires faire. Et qu'est ce que tu appelles une redirection en interne ? Ne désires-tu pas simplement que les urls n'affichent pas /index.php/ et que les liens fonctionnent quand même ? C'est bien ça ? ++ Patrick
goulvench Posté 29 Octobre 2009 Auteur Posté 29 Octobre 2009 Bonjour Patrick, Si j'ai bien compris, une redirection externe c'est quand le serveur renvoie le header 301 ou 302. Une réécriture interne, c'est quand le serveur modifie l'adresse demandée avant de la passer au script PHP (ou autre). En l'occurrence, je veux rediriger les adresses de la forme index.php/*.html mais traiter les adresses du type *.html comme index.php/*.html.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant