Aller au contenu

redirection "dynamique" vers la page d'accueil


Aller à la solution Solutionné par SStephane,

Sujets conseillés

Posté

Bonjour à toutes et tous, et bonne année wink.gif

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!

Posté

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

Posté (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/

J
e vous avoue avoir peu de connaissance en htaccess, du coup je ne comprends pas bien pourquoi ces effets indésirables..

Modifié par caema
Posté

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.
Posté

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.

Posté (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é par caema
  • Solution
Posté

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.

Posté

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 tongue.gif )

Merci pour votre aide!

Posté

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


  • 1 year later...
Posté

Bonjour.

J'ai également besoin d'aide concerant une dredirection avec le .htaccess:

mes url pointent vers url/page/nom_du_slug
et 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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...