Bonjour, je travaille avec easyPhp version et je voudrais configurer mon serveur pour accepter les url rewrite.
Comment configurer?
Version imprimable
Bonjour, je travaille avec easyPhp version et je voudrais configurer mon serveur pour accepter les url rewrite.
Comment configurer?
Un petit passage par les tutos.
Merci, sympha tuto.
J'ai une autre préoccupation, pour un site dynamique (Mysql/Php). Avec un lien dt type :
Comment procéder?Code:<a href="article.php?id=$data->idarticle">suite</a>
J'ai trouvé une solution mais j'ai une erreur 404 (page not fond).
Ficher .htaccess
Ficher PhpCode:
1
2
3 Options +FollowSymlinks RewriteEngine on RewriteRule ^article-([0-9]+)-([A-Za-z]+)\.htm$ /article.php?p=$2[L]
Code:<a href="<?php echo "article-".$data->idart."-".$data->alias.".html";?>"><span class="FontTexteArt"><?php echo $data->titreart?></span></a>
Ca arrive. Tu peux donner un exemple de lien généré par ton code PHP et qui mène à une erreur 404 ?
Dans ton .htaccess, tu as essayé de retirer le / devant article.php (second membre de ta RewriteRule) ?
T'as html dans ton lien et htm dans la RewriteRule.
Il faut que le lien que tu génères en php colle parfaitement avec ta rewriterule.
J'ai apporté les correction mais c'est pareil.
Code:
1
2
3 Options +FollowSymlinks RewriteEngine on RewriteRule ^article-([0-9]+)-([A-Za-z]+)\.html$ article.php?p=$2[L]
Quelles corrections ? Donne nous un exemple de code HTML de lien qui ne marche pas comme déjà demandé.
Code HMLT de la page index.
Code du fichier .htaccessCode:
1
2
3
4
5
6
7
8
9 <div style="padding:5px 5px;"> <a href="<?php echo "article-".$data->idart."-".$data->alias.".html";?>"> <span class="FontTexteArt"><?php echo $data->titreart?></span></a> <p class="FontTexteGris12"><?php echo $data->dateart?></p> <img src="photo/<?php echo $data->imageart?>" class="img1" /> <p style="float:right;"> <?php echo nl2br(substr($data->article, 0,400))?><a href="actualite.php?id=<?php echo $data->idart?>" title="Lire l'article complet"><span class="FontTexteMore"> Lire la suite</span></a> </p> </div>
Le soucis c'est comment récuperer l'id de l'article pour ma page article (page d'affichage) lorsque je click sur le lien?Code:
1
2
3 Options +FollowSymlinks RewriteEngine on RewriteRule ^article-([0-9]+)-([A-Za-z]+)\.html$ article.php?p=$2[L]
J'ai fini par trouver ce qui clochait.
mon expression régulière n'était pas bonne.
\-manquaitCode:
1
2
3 Options +FollowSymlinks RewriteEngine on RewriteRule ^article-([0-9]+)-([A-Za-z\-]+)\.html$ article.php?p=$1[L]
Juste une dernière chose,
je voudrais faire une redirection à la bonne url au cas où on changeais l'url de la barre en modifiant des caractères.
Mais mes navigateur de test (Chrome et fireFox) m'indique une boucle de redirection.Code:
1
2
3
4
5
6
7
8
9 $sqlArt = "SELECT * FROM article WHERE idart=".$_GET['p']; $sqlArt = $connect_db->query($sqlArt); $dataArt = $sqlArt->fetch(PDO::FETCH_OBJ); if($dataArt->alias != $_GET['p']){ header('Status: 301 Moved Permanently', false, 301); header('Location:article-'.$_GET['p'].'-'.$dataArt->alias.'.html'); }
Essaie plutotEDIT : En me relisant je suis même pas sûr de ce que tu veux faire.... idart est toujours égal à $_GET[p] et toujours différent de alias non ?Code:if($dataArt->idart != $_GET['p']){
Je vais essayer d'être plus clair.
un internaute accède à ma page article en cliquant sur le lien.
dans ma barre d'adresse j'ai ça: article-13-me-revoir-la.html
il s'amuse à enlever le "e" de me et actualise la page pour voir ce qui se passe.
Je souhaite qu'après l'actualisation de la page , la bonne url soit réécrite
comme : article-13-me-revoir-la.html
au lieu de
article-13-m-revoir-la.html
Il faut gérer ça en PHP : au début de ta page, avant la toute première balise HTML, il faut que tu vérifiés que le titre récupéré est le bon, et que s'il n'est pas bon, tu rediriges avec le bon titre. Apache ne peut pas t'aider dans cette affaire.
Le souci c'est que tu compares $_GET['p'] qui contient l'id d'article avec l'alias... C'est donc toujours différent et donc tu rediriges à chaque fois.
Problème résolu, il fallait récupérer aussi le paramètre "alias".
La redirection
Fichier htaccessCode:
1
2
3
4
5
6
7
8
9 $p = $_GET['p']; $alias = $_GET['alias']; $sqlArt = "SELECT * FROM article WHERE idart=".$p; $sqlArt = $connect_db->query($sqlArt); $dataArt = $sqlArt->fetch(PDO::FETCH_OBJ); if($dataArt->alias != $alias){ header("Location:article-".$p."-".$dataArt->alias.".html"); }
Le code n'est pas peut-être optimisé mais ça marche.Code:
1
2
3 Options +FollowSymlinks RewriteEngine on RewriteRule ^article-([0-9]+)-([A-Za-z\-]+)\.html$ article.php?p=$1&alias=$2
Merci à tous/toute
Pour mettre plusieurs url dans mon fichier htaccess.
j'ai essayé ça mais ça marche pas ERREUR 404.
LienCode:
1
2
3
4
5 Options +FollowSymlinks RewriteEngine on RewriteRule ^article-([0-9]+)-([A-Za-z\-]+)\.html$ article.php?p=$1&alias=$2 RewriteRule ^dossier/([0-9]+)/([A-Za-z\-]+)\.html$ dossier.php?p=$1&aliasdossier=$2
Code:
1
2 <a href="<?php echo "dossier/".$dataDos->iddossier."/".$dataDos->aliasdossier.".html";?>"><?php echo ucfirst($dataDos->titredossier) ?></a>
Dans l'error_log d'Apache tu auras un bout d'explication. Mais une fois de plus, le code HTML reçu par le navigateur et pas le code PHP nous aiderait plus.
script error_log:
Je met tous les codes:Code:
1
2 127.0.0.1 - - [21/Jul/2013:10:06:03 +0000] "GET /sciencesetprogres/dossier/2/le-co2-mauvais-utilisation-d-une-richesse.html HTTP/1.1" 404 1353 127.0.0.1 - - [21/Jul/2013:10:06:05 +0000] "GET /favicon.ico HTTP/1.1" 404 1123
fichier htaccess:
Fichier contenant le lien : tous-les-dossier.phpCode:
1
2
3
4 Options +FollowSymlinks RewriteEngine on RewriteRule ^article-([0-9]+)-([A-Za-z\-]+)\.html$ article.php?p=$1&alias=$2 RewriteRule ^dossier/([0-9]+)/([A-Za-z\-]+)\.html$ dossier.php?p=$1&aliasdossier=$2
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <div class="boxFolderContent" style="background-color:transparent;"> <?php try { while ($dataDos = $sql->fetch(PDO::FETCH_OBJ)){ ?> <div class="boxFolderElement" style="margin-top:5px; margin-bottom:5px;"> <img src="photo/<?php echo $dataDos->image ?>" alt="<?php echo $dataDos->titredossier ?>" style="margin-bottom:10px;" /><span class="FontBlackTexte"> <?php $sqlDom = "SELECT iddomaine, titre FROM domaine WHERE iddomaine=".$dataDos->iddomaine; $sqlDom = $connect_db->query($sqlDom); $dataIdDom = $sqlDom->fetch(PDO::FETCH_OBJ); echo stripslashes(strtoupper($dataIdDom->titre)); ?></span><br /> <span class="FontBlueDark14"><a href="<?php echo "dossier/".$dataDos->iddossier."/".$dataDos->aliasdossier.".html";?>"><?php echo ucfirst($dataDos->titredossier) ?></a></span> </div> <?php } }catch(PDOException $e){ $e->getMessage(); }?> </div>
Fichier appelé dossier.php
Code de récupération de l'Id.
Code:
1
2
3
4 $p = $_GET['p']; $sqlDos = "SELECT * FROM dossier WHERE iddossier=".$p; $sqlDos = $connect_db->query($sqlDos); $dataDos = $sqlDos->fetch(PDO::FETCH_OBJ);