Redirection automatique

Nouveau WRInaute
Salutation,

J'ai commencé la redirection il y a 2 jours, et je me suis aperçu que c'était toujours la meme redirection qui est faite ( du moins du même style):


RewriteRule ^truc.php$ ?page=includes/truc.php [L]
RewriteRule ^machin.php$ ?page=includes/machin.php [L]

Donc je me suis pourquoi ne pas tout faire sur une seule ligne,faire un truc "automatique",car je vais en avoir plusieurs à faire et dont certaines pourront être crées plus tard (c'est celles d'un menu, il sera possible de créer un sous menu, donc ne pas être obliger de retourner dans le .htaccess pour faire une nouvelle redirection). Seulement je n'y suis pas arrivé :?

Voila, j’espère avoir été assez claire.

Merci.
 
WRInaute impliqué
Code:
RewriteRule ^(.*)\.php$ ?page=includes/$1.php [L]

Attention à ne pas faire cette erreur :
PHP:
<span class="syntaxdefault"><br />require $_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'page'</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault"> </span>

Qui est une faille de sécurité.
 
Nouveau WRInaute
Merci je vais tester

Je sais que c'est une faille, mais elle est gérée

if(isset($_GET['page'])){
$la = $_GET['page'];
if(file_exists($_GET['page'])){
require $la;
}else{
require "includes/home.php";
}
}else{
require "includes/home.php";
}

EDIT: RewriteRule ^(.*)\.php$ ?page=includes/$1.php [L] me retourne un internal server Error :/
 
WRInaute impliqué
Euh non, elle n'est pas gérée du tout là.

Si je met, par exemple, "../admin/index.php" et que le fichier existe, je me retrouve avec la possibilité d'effectuer des actions dangereuses.
 
Nouveau WRInaute
Blount a dit:
Euh non, elle n'est pas gérée du tout là.

Si je met, par exemple, "../admin/index.php" et que le fichier existe, je me retrouve avec la possibilité d'effectuer des actions dangereuses.

seulement je fait des vérif en début de page et si on est pas logué en tant qu'admin sa ne marche pas

if(!isset($_SESSION['admin']){
blablabla...
}

(normalement ^^)

Y'a une meilleur méthode?
 
WRInaute impliqué
Il n'y a pas de meilleur méthode, mais là, tu laisses une situation pouvant se trouver critique. La page d'admin était un exemple, mais dit toi que tous les fichiers peuvent être inclus de cette manière.

Personnellement, je ferai :
Code:
RewriteRule (.*)\.php$ index.php?page=$1 [L]

Ensuite, en PHP :
PHP:
<span class="syntaxdefault"><br />if </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'page'</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> in_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'page'</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'truc'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'machin'</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> file_exists</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'includes/'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'page'</span><span class="syntaxkeyword">]</span><span class="syntaxstring">'.php'</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    require </span><span class="syntaxstring">'includes/'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'page'</span><span class="syntaxkeyword">]</span><span class="syntaxstring">'.php'</span><span class="syntaxkeyword">;<br />}<br /></span><span class="syntaxdefault"> </span>
 
Nouveau WRInaute
Sa ne marche pas,il doit y avoir un bug quelque part :/, aucune page n'est appelé par require,

le .htaccess doit aller à la racine ou dans le dossier includes?
 
WRInaute impliqué
En général, on place ce fichier à la racine.

Après, on ne sait rien de ta structure de fichier …
 
Nouveau WRInaute
il est a la racine, pour la structure

racine/index.php ( qui comporte le require)
racine/.htaccess
racine/includes/truc.php
racine/includes/machin.php
 
Nouveau WRInaute
The requested URL /index.php was not found on this server.

:/

C'est pas grave,je vais revenir comme avant,voir pour modifier et faire le test avec in_array, peut être que came sautera aux yeux ^^
 
Nouveau WRInaute
C'est bon, apres un peu de recherche cela fonctionne avec 1 petite modif:

RewriteRule (.*)\.html$ index.php?page=$1 [L]

.html, car .php est utilisé dans mon script d'affichage.

et
Code:
if (isset($_GET['page']) AND in_array($_GET['page'], array('accueil', 'manifestations'))  AND file_exists('includes/'.$_GET['page'].'.php')) {
   							 require 'includes/'.$_GET['page'].'.php';
						}elseif(!isset($_GET['page'])){
							require 'includes/home.php';
						}
						else echo "erreur";
 
Discussions similaires
Haut