[RESOLU] Rediriger une page $_GET réécrite

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Rediriger une page $_GET réécrite

Re: Rediriger une page $_GET réécrite

par kakou34 » 12 mars 2019, 21:36

Bon bha je revenai pour dire que j'avais trouvé.
J'inscris pas mon code il est semblable au tiens.

En tout cas merci pour les infos !

Re: Rediriger une page $_GET réécrite

par Saian » 12 mars 2019, 18:29

Ok je crois que je viens de comprendre ton problème. Désolé j'avais lu un peu trop vite ton message.

En fait la page contact existe donc l'adresse /contact affiche bien une page contact, mais tu veux que l'adresse originale index?page=contact retourne une erreur.

Dans ce cas, comme suggère Spols en combinant les 2 concepts.
Tu devrais pouvoir te baser sur $_SERVER['REQUEST_URI'] qui devrait retourner /contact ou /index?page=contact selon l'adresse saisie.
Tu pourrais donc tester cette variable pour savoir si tu es en présence de l'adresse originale et afficher une page d'erreur dans ce cas (par exemple tester que REQUEST_URI contient index?page=).
if (strpos($_SERVER['REQUEST_URI'], 'index?page=') !== false) {
  header('Location: http://ton.nom.de.domaine/erreur', true, 404);
  exit ;
}

Sachant que personnellement j'aurai plutôt tendance à injecter le contenu de la page d'erreur plutôt que de faire une redirection, contrairement à l'exemple de code que j'ai mis, car il me parait plus logique que ce soit l'adresse indésirée qui s'affiche en 404.
Donc je partirais plutôt sur un :
if (strpos($_SERVER['REQUEST_URI'], 'index?page=') !== false) {
  header("HTTP/1.0 404 Not Found");
  echo file_get_contents('la-page-d-erreur.html');
  exit ;
}

Re: Rediriger une page $_GET réécrite

par kakou34 » 12 mars 2019, 16:45

Alors,

Rediriger les visiteurs sur une page erreur si la page existe pas j'y arrive pas de soucis.
Je cherche juste que les anciens liens ne soit pas consultables. (En gros en passant par $_GET)

J'ai tenté ton astuce Saian, elle est cool mais en écrivant le lien par $_GET sa fonctionne aussi :(

Je vérifie déjà l'existence de la page pas de soucis.
Je tourne un peu en rond si vous avez un morceau de code pour m'éclairait..

Re: Rediriger une page $_GET réécrite

par Spols » 12 mars 2019, 15:56

Il faut combiner les 2 concepts dans ta page index.php.

si tu ne veux pas utiliser un tableaux des pages authorisée, tu peux aussi faire un test sur l'existence de la page à inclure.

Re: Rediriger une page $_GET réécrite

par Saian » 12 mars 2019, 15:20

C'est bien la page index qui va s'exécuter, mais $_GET['page'] n'étant égal ni à page1 ni à page2, le script va rentrer dans le if et retourner la 404. Le tableau doit contenir les valeurs connues (autorisées) de page. Il y a un not (!) devant le in_array (si la valeur de $_GET['page'] n'est pas dans les valeurs du tableau).

Re: Rediriger une page $_GET réécrite

par kakou34 » 12 mars 2019, 14:35

L'idée me plaît Saian.
Mais dans ton cas le visiteur pourra quand même avoir accès à la page via : www.monsite.fr/index?page=contact non ?
C'est ce que je veux éviter :)

Re: Rediriger une page $_GET réécrite

par Saian » 12 mars 2019, 12:37

Salut,

A la base l'erreur 404 est automatique. Si le fichier n'existe pas, le serveur web retourne une 404.

Mais dans ce cas, étant donné que tu utilises ce que l'on pourrait appeler un contrôleur principal (index) vers lequel tu rediriges toutes les adresses [a-z-]*, c'est dans ce contrôleur que tu dois gérer l'erreur 404.

Tu pourrais par exemple maintenir un tableau des valeurs de $_GET['page'] connues.
Et si la valeur de page est inconnue, tu envoies un header 404 (copier depuis la doc php header) suivi d'un exit :
if (!in_array($_GET['page'], array('page1', 'page2'))) {
  header("HTTP/1.0 404 Not Found");
  exit ;
}

PS : en admettant que tu ais une page 404.html tu pourrais remplacer le header par celui ci :
header('Location: http://ton.nom.de.domaine/404.html', true, 404);

Ou alors tu pourrais charger ou afficher le contenu de la page 404 afin que ce soit bien l'adresse en 404 qui s'affiche comme 404 :
if (!in_array($_GET['page'], array('page1', 'page2'))) {
  header("HTTP/1.0 404 Not Found");
  echo file_get_contents('404.html');
  exit ;
}
// OU
if (!in_array($_GET['page'], array('page1', 'page2'))) {
  header("HTTP/1.0 404 Not Found");
  echo 'Page not found!';
  exit ;
}

Re: Rediriger une page $_GET réécrite

par kakou34 » 12 mars 2019, 12:12

Oui j'y est pensé mais le problème c'est pour les pages qui n'existent pas.
Comment rediriger vers la page erreur pour une page qui n'existent ?

Re: Rediriger une page $_GET réécrite

par Spols » 09 mars 2019, 23:35

avec cette règle tu crée une boucle infinie de redirection.

l'idée est de faire une redirection en php si l'url ne te convient pas. donc dans le code de ta page index, tu peux détecter grace aux variables $_SERVER si tu est sur l'url réécrite ou non si non tu redirige avec header() vers l'url réécrite ou vers ta page erreur si tu veux mais je prefère la première option

Rediriger une page $_GET réécrite

par kakou34 » 09 mars 2019, 17:02

Bonjour amis codeurs 8-)

J'ai besoin d'un petit coup de pouce pour rediriger une page à la base $_GET réécrite.
Comme un dessin vaux mieux qu'un long discours.

Prenons comme exemple ma page contact :

Son lien : http://monsite.fr/contact
Elle est réécrite comme cela :
RewriteRule ^([a-z-]*)$ index?page=$1 [L]
Donc si je tape dans mon navigateur : http://monsite.fr/index?page=contact sa fonctionne aussi.

Et je cherche donc à ce que quand je tape : http://monsite.fr/index?page=contact je sois rediriger sur ma page erreur

J'ai écris cela mais sa fonctionne pas
Redirect /index?page=$1 /erreur
Je rappel que ma page erreur est réécrite aussi.

Si quelqu'un à une astuce,
Merci d'avance.