Aller au contenu

empecher l'acces direct à une page mais autoriser l'include


Sujets conseillés

Posté

Bonjour ,

J'ai une page qui est intégrée dans une autre . la page description.php comporte une include de la page maire.php .

j'aimerais interdire aux visiteurs d'acceder directement à maire.php ou s'il tente de la faire de le renvoyer vers description-maire.php

Merci de votre aide

Posté

Tu n'as qu'à placer la page mairie.php dans un dossier en dehors du dossier WWW ou public_html, enfin le dossier qui est la base de ton site web.

Tu places mairie.php en dehors de ce dossier, tu peux toujours faire un include mais les visiteurs ne peuvent plus y accèder.

c'est le plus simple je crois, sinon il y aurait d'autres solutions j'imagine, mais pourquoi y réfléchir, celle là est très simple.

Posté

je n'y avais pas pensé ... c'est vrai que mettre maire.php dans un dossier serai l'ideal .

Mais malheureusement meme si dans l'absolue c'est la solution simple , pour moi c'est limite la voie compliquée .

J'ai du rewrite d'URL , de l'include par paramètre d'url et je suis pas trop à l'aise dedans .

voila :

RewriteEngine on
RewriteRule ^description-([a-z]+)\.php$ description.php?page=$1 [L]

<?php
$page = 'defaut';
if(isset($_GET['page'])) // si la variable n'est pas definie
$page = $_GET['page'];
$tab = array(
'defaut' => 'riou.php',
'radedemarseille' => 'radedemarseille.php',
'frioul' => 'frioul.php',
'cotebleue' => 'cotebleue.php',
'planier' => 'planier.php',
'maire' => 'maire.php',
'jarrejarron' => 'jarrejarron.php',
'plane' => 'plane.php',
'riou' => 'riou.php'

);
if(array_key_exists($page, $tab)) {
include($tab[$page]);
}
?>

Un code en php en tete de la page maire.php pourrai marcher , opérant une redirection :

if(eregi('maire.(html|php)', $_SERVER['REQUEST_URI']) ) {
header ('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.pixel-plongee.fr/description-maire.php');

Mais la j'ai une boucle infinie ... ce qui est logique

Posté

Ben deux solutions très simple, soit tu fais comme je t'ai dis, donc tu les met dans un répertoire en dehors du WWW, et dans ce cas il n'y a qu'à changer :

'maire' => 'maire.php',

par

'maire' => '../autrerepertoire/maire.php',

.. voulant dire un répertoire en arrière

sinon si tu veux continuer a faire comme tu as fait, avec ton redirect qui fait une boucle, pour pas qu'il fasse de boucle il suffit de renommer tes pages, par exemple mairie.php tu l'appelle motclemairie.php

et tu fais :

if(eregi('motclemaire.(html|php)', $_SERVER['REQUEST_URI']) ) {

comme ca il ne bouclera pas a cause du description-mairie.php

Posté

Tu interdits l'include à partir d'un autre site distant - include('http://www..................monfichier.php') - mais tu n'interdis pas d'y accéder à partir de ton site - include('/tonfichier.php') -.

Posté

en fait ton htaccess restreint l'accès en mode web, alors que tes scripts travaillent, eux, en linux (ou windows) et donc les accès se règlent dans ce cas là par le système d'exploitation et non apache

Posté

Une solution simple à mettre en oeuvre mais qui marche très bien aussi est un simple define dans ta page qui inclut les autres.

tu fais un define de ce style :

<?php
define('INCLUSION_AUTORISEE',1);
php?>

puis en haut de tes pages que tu ne veux voir incluses que par cette page :

<?php
if (INCLUSION_AUTORISEE != 1) {
//fais ce que tu veux ici
exit;
}
?>

Posté

Bonjour,

je mettrais juste cela au début du fichier :

if (basename($_SERVER['PHP_SELF'])==__FILE__) die();

Si le nom du script appelé dans l'url (basename($_SERVER['PHP_SELF'])) est identique à celui du fichier PHP en cours (__FILE__), alors on n'affiche rien.

en espérant aider ;)

b0b0

Posté
Une solution simple à mettre en oeuvre
le plus simple reste quand même le fichier htaccess : rien à modifier dans les autres fichiers

Veuillez vous connecter pour commenter

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



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