Problème écriture URL rewriting

Eléphant du PHP | 372 Messages

27 avr. 2016, 21:20

Salut à tous.
J'ai un problème surement tout bête en fait tout marche bien mais si je met / au lieu de - mon url rewriting se fait mais du coup les appel ne se font pas bien par exemple tout ce qui est liée au style..

Je souhaite des urls du type:
http://127.0.0.1/digital/actu/rhone-alpes.html

actuellement ca marche mais avec
http://127.0.0.1/digital/actu-rhone-alpes.html

Mon htaccess.
RewriteRule ^actu/([A-Za-z0-9_-]+).html$ list.php?region=$1
RewriteRule ^actu.html list.php
#RewriteRule ^([A-Za-z0-9_-]+).html$ $1.php

Mon php pour faire le lien:
<li class="list-unstyled marg_li" id="li_'.$url.'"><a href="sortie/'.$url.'.html" title="Sortir en-'.$url.'"><span class="liste_region"><strong class="weight_classic">Sortir en </span> '.$v.'</strong></a><span class="badge pull-right">'.$nb.'</span></li>'
Donc ma page s'affiche bien avec le slash mais ce sont les appels que je dois modifier genre au lieu de css/style.css faut que je mette ../css/style.css.


PS: car une fois sur cette nouvelle page on peut encore filtré avec donc même problème avec ce /
<?php
				asort($aLoisirs);
				foreach($aLoisirs as $k => $v) {;
				echo '<li><a href="'.$_REQUEST['region'].'/'.strtolower($v).'.html">'.$v.'</a><span class="subDropdown plus"></span></li>'."\n";
				}
				?>

coté htacces jai rajouter cette ligne:
RewriteRule ^actu/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+).html$ list.php?region=$1&loisir=$2


Comment éviter ça svp ?
Merci à vous

Mammouth du PHP | 2703 Messages

27 avr. 2016, 21:39

commencer tous les liens ou appels de ressources par / et mettre le chemin depuis la racine du site.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 avr. 2016, 09:02

Bonjour,

Dans ton htaccess, enlève le ^ et contente toi de travailler / contrôler la fin de la chaine plutôt que son intégralité.
Pour ce qui est des chemins relatifs, ils sont effectivement constitués à partir de l'url de la page demandée, si tu modifies celle-ci via le htaccess, tes chemins doivent être adaptés... tu peux soit utiliser des chemins absolus comme suggéré par or1, soit utiliser la balise html <base /> pour définir l'url de base pour des liens/sources donnés en relatif
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 372 Messages

29 avr. 2016, 07:31

Donc en gros j'ai une page qui est du type:

http://127.0.0.1/digital/actu/rhone-alpes.html


apres une fois sur cette page peut filtrer donc je peut me retrouver avec une page du type:
http://127.0.0.1/digital/actu/rhone-alpes/sondage.html

Dois je modifier donc mes appel js et css en mettant un simple / devant ? ../
<link rel="stylesheet" type="text/css" href=" ../css/style.css" media="all">

cote htacces.
RewriteRule ^actu/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/page-([0-9]+).html$ list.php?region=$1&loisir=$2&page=$3
RewriteRule ^actu/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+).html$ list.php?region=$1&loisir=$2

Merci encore

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 avr. 2016, 11:41

Bonjour,

Ce n'est pas devant, mais à la place... déjà il faut comprendre pourquoi tes chemins relatifs ne sont pas bons :)
- Si tu appelles la page "http://127.0.0.1/digital/actu/rhone-alpes.html", le chemin vers ton répertoire css (en supposant que celui-ci soit dans le répertoire "digital") sera "../css". On sort du répertoire "actu" pour revenir au répertoire "digital" ( ../ ) puis on ouvre le dossier "css".
- Si tu appelles la page "http://127.0.0.1/digital/actu/rhone-alpes/sondage.html", le chemin vers ton répertoire css (en supposant que celui-ci soit dans le répertoire "digital") sera "../../css". On sort du répertoire "rhone-alpes" pour revenir à "actu" (../) puis au répertoire "digital" ( ../../ ) puis on ouvre le dossier "css".

Tu peux donc donner un chemin absolu pour ta feuille de style de façon à ce que celle-ci soit toujours ouverte à partir de la racine du serveur, sans se soucier du répertoire dans lequel se trouve la page qui le demande. On utilise pour cela un "/" sans rien devant, ce qui équivaudrait au C:\ de ta machine :)
<link rel="stylesheet" type="text/css" href="/css/style.css" media="all">
Ce chemin devra être adapté si le dossier "css" n'est pas à la racine du serveur mais dans un sous répertoire.

Autre solution évoqué plus haut, garder des chemins relatifs, mais préciser la "base" de construction de ces chemins ... ou alors pour chaque page appelée, déterminer son url par rapport au dossier css et remonter autant de niveau que nécessaire... autant dire que la première reste la plus simple :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 372 Messages

30 avr. 2016, 00:18

Alors pour le coup j'ai donc mon site " digital " et dossier " css " dans lequel sont rangé toutes mes feuilles de style.

Après l'url change selon les filtre choisi par l'urilisateur comme on à vu sur le message précédent

Je peut si j'ai bien compris donc utiliser ceci:
<link rel="stylesheet" type="text/css" href="/css/style.css" media="all">

mais l'appel ne se fait pas de cette feuille de style...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mai 2016, 12:04

La racine de ton site concerne tout ce qui est placé après le nom de domaine. L'url de la page "http://127.0.0.1/digital/actu/rhone-alpes/sondage.html" équivaut donc à "/digital/actu/rhone-alpes/sondage.html"

Si ton dossier css est inclut dans le répertoire digital, alors son chemin absolu est "/digital/css/style.css"
Si ton dossier css est à la racine de ton site (au même niveau que digital), alors le chemin est "/css/style.css" :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...