Rewrite, probleme du caractere '/'

  • Auteur de la discussion Auteur de la discussion eve
  • Date de début Date de début
Nouveau WRInaute
Bonjour,
voila je voulais obtenir au depart des url comme ceci :
http://www.mondomaine.com/categorie1/categorie2 (sans .html a la fin)
pour representer :
http://www.mondomaine.com/index.php?p=c ... categorie2
et en lisant sur ces forums j'ai lu qu'il etait impossible de ne pas mettre l'extension.

Enfin bref en faisant une regle comme ceci :
RewriteRule ^(.*?)-(.*?)\.html$ index.php?p=$1&option=$2 [L]
RewriteRule ^(.*?)\.html$ index.php?p=$1 [L]

Et que j'uilise l'url : http://www.mondomaine.com/categorie1-categorie2.html => Impeccable

Or si je change mes regles ( changement de '-' par '/' ) :
RewriteRule ^(.*?)/(.*?)\.html$ index.php?p=$1&option=$2 [L]
RewriteRule ^(.*?)\.html$ index.php?p=$1 [L]

Alors dans ce cas, les chemins des images ne sont plus bons, ainsi que le css etc..

Que se passe t-il?

Merci de vos reponses..
 
WRInaute occasionnel
Tu veux dire que la page est correctement affichée mais que les appels aux autres éléments ne fonctionnent pas? Ils ne seraient pas en liens relatifs par hasard? Genre <img src='image.jpg' /> ? Si c'est le cas, change les chemins image, css, etc pour de l'absolu, par exemple <img src='/image.jpg' />

Par ailleurs, il est tout à fait possible d'utiliser des urls sans extension. Dans ton cas, il suffirait de retirer le \.html dans les règles. Il faudrait cependant ajouter des conditions pour éviter de réécrire tous les appels, entre autres ceux des images et des feuilles de style.
 
WRInaute occasionnel
A priori, tu es victime du mode de fonctionnement des .htaccess. Voir https://www.webrankinfo.com/forum/t/url-rewriting-a-tendance-schizophrene.15487/ pour un peu plus de détails.

Pour éviter la réécriture des fichiers css, images et du index.php quand il a été traité, il faut une règle supplémentaire pour empêcher le rewriting, par exemple
Code:
RewriteRule \. - [L]
RewriteRule ^([^/]*?)/(.*?)$ index.php?p=$1&option=$2 [L] 
RewriteRule ^([^/]*?)$ index.php?p=$1 [L]
Ici, la première règle stoppe tout quand il existe un . dans l'url.
 
Nouveau WRInaute
Alors la merci, mettre 'RewriteRule \. - [L]' corrige pas mal mes problemes.
ce qui donne dans mon htaccess :
RewriteRule \. - [L]
RewriteRule ^([^/]*?)/(.*?)$ index.php?p=$1&option=$2 [L]
RewriteRule ^([^/]*?)$ index.php?p=$1 [L]

J'ai juste encore un petit truc.

L'url de mon site est http://www.nuxy.net

Tester les 3 differents liens a gauche:
Nuxy
Edito
Forums

Quand on click sur 'Nuxy' (http://www.nuxy.net/root) ca le fait bien, alors que les autres, il rajoute encore /?p=categorie

Mon fichier index.php traite les urls de la forme :

if (!$_GET['p'])
{ include "edito/index.php"; }
else if ($_GET['p'] == "root")
{ include "root.php"; }
else {
if (file_exists( $_GET['p']."/index.php" )) include ($_GET['p']."/index.php");
else include "lib/error.php";
}
 
WRInaute occasionnel
Il semblerait qu'il y ait une interaction malheureuse avec la directive DirectoryIndex du fait de l'existence des répertoires edito et forum.
Trois solutions simples : soit changer les noms de répertoire, soit remonter les index.php et les transformer en edito.php et forum.php, soit placer les includes dans une arborescence indépendante.
 
Nouveau WRInaute
Ah ok, bon je pense que je vais prendre la solution de remonter les index.php et les renommer en edito.php, forum.php car changer le nom des repertoires je viens d'essayer et soit j'ai mal compris ce que tu as dit, soit ca marche pas.

J'ai renommé 2 repertoires :
forum en 'pforum'
edito en 'pedito'

et changer dans mon /index.php :
if (file_exists( $_GET['p']."/index.php" )) include ($_GET['p']."/index.php"); en
if (file_exists( "p".$_GET['p']."/index.php" )) include ("p".$_GET['p']."/index.php");

Ca fait toujours pareil..
 
Nouveau WRInaute
Ba ca a pas l'air, viens de le vider et toujours pareil...

Bon c'est peut etre une option qui differe dans le httpd.conf ?
 
Discussions similaires
Haut