caema Posté 2 Janvier 2014 Posté 2 Janvier 2014 Bonjour à toutes et tous, et bonne année J'ai besoin de vos lumières pour un petit soucis de redirection dynamique. A la racine de mon site, j'ai mon fichier index.php, qui s'occupe de récupérer un champ "slug" dans ma base de données (en gros, c'est l'URL de ma page), pour ensuite afficher la page désirée.Voici donc ce que contient mon index.php: <?php$auth = 0;include 'lib/includes.php'; // inclus notamment le fichier constants.phpinclude 'lib/image.php';$slug = $db->quote($_GET['slug']);$select = $db->query("SELECT * FROM posts WHERE slug = $slug AND type='page'");$page = $select->fetch();$page_id = $page['id'];$title = $page['name'];/*** GESTION des NEWS **/$posts = $db->query(" SELECT * FROM posts WHERE type='post'")->fetchAll();include 'partials/header.php';?><div class="col-md-8"> <!-- POUR LES PAGES --> <article id="main" class="row featurette"> <h3><?= $page['name']; ?></h3> <div class="col-md-7"> <p><?= $page['content']; ?></p> </div> </article> Comme indiqué en commentaire dans ce code, j'inclus entre autres le fichier constants.php, que voici: <?phpdefine('WWW_ROOT', dirname(dirname(__FILE__)));$directory = basename(WWW_ROOT);$url = explode($directory, $_SERVER['REQUEST_URI']);// si je suis à la racineif(count($url) == 1){ define('WEBROOT', '/');}else{ define('WEBROOT', $url[0] . $directory.'/');}define('IMAGES', WWW_ROOT . DIRECTORY_SEPARATOR . 'img'); A la racine, j'ai également un fichier .htaccess, avec le code suivant: RewriteEngine onRewriteRule ^([a-z0-9\-]+)$ ?slug=$1 Actuellement, ce fichier s'occupe uniquement de réécrire correctement l'url de la page grâce à son slug.Par exemple, la page nous contacter: son slug est nous-contacter Bon, jusque là tout marche bien.Ce que je souhaite, c'est effectuer une redirection, afin que lorsque le visiteur arrive sur le site, il soit redirigé automatiquement vers la page d'accueil, dont le slug est tout simplement accueil.J'espère avoir été claire dans mes explications?Petite précision: actuellement, je suis en local, sous wamp.Voilà, j'espère que vous pourrez m'aider? D'avance merci!
SStephane Posté 2 Janvier 2014 Posté 2 Janvier 2014 RewriteEngine on RewriteRule ^/?$ ?slug=accueil [L] RewriteRule ^accueil$ / [L,R=301] RewriteRule ^([a-z0-9\-]+)$ ?slug=$1 Un truc comme ça devrait suffire à vue de nez
caema Posté 2 Janvier 2014 Auteur Posté 2 Janvier 2014 (modifié) Votre code fonctionne bien, dans le sens où quand je me rends sur le site, je suis automatiquement redirigée vers la page d'accueil.Par contre, j'ai un effet très indésirable: une fois votre .htaccess mis en place, lorsque je clique sur un lien du menu pour me rendre sur une autre page, la bonne URL se met dans la barre d'adresse, mais le contenu reste celui de ma page d'accueil, ce qui n'était pas le cas avant la mise en place du htaccess que vous me recommandez.Et si je clique sur le lien "accueil" de mon menu, je suis redirigée vers un autre dossier de mon localhost, à savoir http://localhost/test/Je vous avoue avoir peu de connaissance en htaccess, du coup je ne comprends pas bien pourquoi ces effets indésirables.. Modifié 2 Janvier 2014 par caema
caema Posté 2 Janvier 2014 Auteur Posté 2 Janvier 2014 J'ai enlevé le test, j'ai donc: RewriteEngine on RewriteRule ^/?$ ?slug=accueil [L] RewriteRule ^accueil$ / [L,R=301] RewriteRule ^([a-z0-9\-]+)$ ?slug=$1 mais cela cause toujours d'autres soucis: quand je clique sur le lien "accueil" de mon menu, je suis redirigée vers la racine de mon localhost, quand je clique sur un autre lien du menu, par exemple "contact", je suis bien redirigée vers la bonne URL (/contact), mais le contenu de mes pages ne change pas: peu importe la page où je me trouve, c'est le contenu de la page d'accueil qui s'affiche.
SStephane Posté 2 Janvier 2014 Posté 2 Janvier 2014 Le mieux lorsque tu développes, c'est d'avoir un environnement de dev le moins différent de ton envirronement de production. Ca t'évitera déjà d'avoir des soucis lors du déploiement de tes sites. En clair, cet exemple fonctionnera pour www.tonsite.com/?slug=truc, mais pas sur ton environnement de dev, ce qui est fort regrettable... mais passons. Tu travailles manifestement dans un sous-dossier du domaine localhost, genre http://localhost/machin Dans ce cas : RewriteEngine on RewriteBase /machin RewriteRule ^/?$ ?slug=accueil [L] RewriteRule ^accueil$ /machin [L,R=301] RewriteRule ^([a-z0-9\-]+)$ ?slug=$1 En remplaçant machin par ton sous-dossier, ce sera surement ok. Mais ça t'impose de changer à chaque déploiement, et c'est franchement laid. Si tu souhaites creuser, je te recommande ce que j'impose à ceux qui bossent avec moi : edites ton fichiers hosts (c:\windows\system32\drivers\etc\hosts sur windows; /etc/hosts sur mac & unix) et ajoute le domaine final que tu vas utiliser pour le faire pointer en local - 127.0.0.1- . (change l'extension, si tu n'as pas envie de jouer avec l'hosts à chaque déploiement, genre www.tonsite.dev ). ce qui donne : 127.0.0.1 www.tonsite.com Ensuite crée un virtualhost dans apache de la même manière que ce sera très certainement fait dans ton environnement de production. <Virtualhost *:*> DocumentRoot "F:\www\tonsite" ServerName www.tonsite.com </VirtualHost> (ajouter un namevirtualhost avant si ce n'est déjà fait dans la conf) Ainsi, tu n'as pas à te poser la question de savoir si t'auras des problèmes de path ou non quand tu déploieras en production.
caema Posté 2 Janvier 2014 Auteur Posté 2 Janvier 2014 (modifié) Pour tout vous avouer, je travaille même dans un environnement de ce type: /localhost/PERSO/mon_dossier/Du coup, j'ai réalisé ceci pour le htaccess: RewriteEngine onRewriteBase /PERSO/mon_dossierRewriteRule ^/?$ ?slug=accueil [L]RewriteRule ^accueil$ /PERSO/mon_dossier [L,R=301]RewriteRule ^([a-z0-9\-]+)$ ?slug=$1 mais cela ne fonctionne pas non plus.Maintenant, je comprends bien ce que vous m'expliquez concernant l'environnement de travail, il est certes mieux d'avoir un environnement de dev le plus semblable possible à l'environnement de production.En gros, pour chaque projet, vous ajouter une ligne dans hosts, c'est bien cela? Et ce peu importe où se trouve mon dossier de travail? Modifié 2 Janvier 2014 par caema
Solution SStephane Posté 2 Janvier 2014 Solution Posté 2 Janvier 2014 RewriteEngine on RewriteBase /PERSO/mon_dossier RewriteRule ^accueil$ /PERSO/mon_dossier [L,R=301] RewriteCond %{QUERY_STRING} ^$ RewriteRule ^/?$ ?slug=accueil [L] RewriteRule ^([a-z0-9\-]+)$ ?slug=$1 [L] Et oui pour le hosts, j'ai une ligne par projet.
caema Posté 2 Janvier 2014 Auteur Posté 2 Janvier 2014 Ok, le code fonctionne nickel.Mais je vais néanmoins tenter de mettre en place vos conseils concernant les fichiers hosts.Une ressource peut-être pour m'aider dans mon apprentissage? (après cela, promis je vous laisse en paix )Merci pour votre aide!
SStephane Posté 2 Janvier 2014 Posté 2 Janvier 2014 Euh, aucune idée, mais tu n'as pas grand chose de plus à faire que ce que je t'ai déjà expliqué : t'ajoutes une ligne au hosts, et tu configure correctement apache avec les virtualhost
caema Posté 3 Janvier 2014 Auteur Posté 3 Janvier 2014 Ok, merci beaucoup pour vos lumières.Bonne journée à vous!
adidash Posté 6 Janvier 2015 Posté 6 Janvier 2015 Bonjour. J'ai également besoin d'aide concerant une dredirection avec le .htaccess: mes url pointent vers url/page/nom_du_sluget je souhaiterai pouvoir redirigeir sur url/page/index si le slug est vide.. Sachat que chaque slug est en fait contenu dans un dossier: /page/slug = ROOT/nom_du_slug Merci d'avance
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant